2010-01-22 14 views
14

Estoy tratando de integrar Jetty 6.1 en otro programa. Jetty está volcando información INFO-log y necesito apagarlo. ¿Hay una manera simple de deshabilitar el programa de registro de formamatica?Embarcadero: ¿cómo deshabilitar el registro?

+4

¿Encontró la solución? ¿Qué tal actualizar tu publicación? –

Respuesta

5

En Jetty Embedded puedes probar: org.mortbay.log.Log.setLog (null); Antes de llamar al servidor.

+1

sugerencia: ** antes ** el servidor de llamadas es importante –

3

He tenido éxito en la creación de un registrador ficticio que descarta todo lo que siempre se ha pedido que inicie sesión, y luego lo pasa al Log.setLog(...).

E.g.

private static class DummyLogger implements Logger { 

    @Override 
    public String getName() { 
     return "DummyLogger"; 
    } 

    @Override 
    public void warn(String msg, Object... args) {} 

    @Override 
    public void warn(Throwable thrown) {} 

    @Override 
    public void warn(String msg, Throwable thrown) {} 

    @Override 
    public void info(String msg, Object... args) {} 

    @Override 
    public void info(Throwable thrown) {} 

    @Override 
    public void info(String msg, Throwable thrown) {} 

    @Override 
    public boolean isDebugEnabled() {return false; } 

    @Override 
    public void setDebugEnabled(boolean enabled) {} 

    @Override 
    public void debug(String msg, Object... args) {} 

    @Override 
    public void debug(Throwable thrown) {} 

    @Override 
    public void debug(String msg, Throwable thrown) {} 

    @Override 
    public Logger getLogger(String name) {return this; } 

    @Override 
    public void ignore(Throwable ignored) {} 

} 

Como referencia, que utilizan estos paquetes:

import org.eclipse.jetty.util.log.Log; 
import org.eclipse.jetty.util.log.Logger; 

en lugar de los Mortbay, pero probablemente debería comportarse de la misma (o al menos de manera similar).

1

Mirando el debugging page mencionado por Vinay:

embarcadero utiliza la infraestructura de registro SLF4J para tender un puente a commons-logging para JSP2.0. Esto significa que los mensajes de registro común se envían a la interfaz SLF4J.

Enviamos la implementación de registro simple, que solo enviará mensajes de nivel INFO y superiores a stderr.

Sin embargo, puede reemplazar el registro simple con cualquier otra aplicación de registro SLF4J mediante la eliminación de la lib/jsp-2.0/slf4j-sencillo-1,0-rc5.jar y copiado en los impl SLF4J de su elección. El código del núcleo Jetty tiene una dependencia suave en SLF4J, lo que significa que si se encuentra un impl SLF4J en el classpath al inicio, Jetty lo dirigirá a todos los mensajes de inicio de sesión.

Como alternativa, puede quitar los frascos SLF4J por completo y utilizar commons-logging no por copiar en el frasco commons-logging y una commons-logging impl registro compatibles, tales como log4j, a la lib /. Sin embargo, si lo hace, tenga en cuenta que, como el código de Jetty principal no utiliza el registro de commons, en su lugar, registrará los mensajes en stderr. Siga leyendo para aprender cómo obtener el mecanismo de registro de stderr para imprimir mensajes de nivel de DEPURACIÓN.

Así que se trata de poner el archivo jar correcto. Por ejemplo, podría poner una interfaz compatible con log4j y configurar su archivo de configuración log4j correctamente para silenciar por completo las declaraciones de registro de embarcadero o para ser más detallado.

3

Conjunto nivel StdErrLog-WARN, antes de iniciar el servidor:

Properties p = new Properties(); 
p.setProperty("org.eclipse.jetty.LEVEL", "WARN"); 
org.eclipse.jetty.util.log.StdErrLog.setProperties(p); 
+0

Esto parece funcionar, aunque no existe la opción 'NINGUNO '. 'esperando solo [ALL, DEBUG, INFO, WARN]' –

+0

@ThomasAhle es cierto, pero estoy de acuerdo con su elección. No es realmente una buena idea evitar que aparezca un error en el registro. –

+0

@ThomasAhle Parece que hay una opción 'OFF' aunque:' $ {name | hierarchy} .LEVEL = (ALL | DEBUG | INFO | WARN | OFF) ', fuente: http://download.eclipse.org/jetty /9.3.6.v20151106/apidocs/org/eclipse/jetty/util/log/StdErrLog.html – m4rtin

11

Una versión más concisa de la respuesta de Jeff Chern:

org.eclipse.jetty.util.log.Log.setLog(new NoLogging()) 

.

import org.eclipse.jetty.util.log.Logger; 

public class NoLogging implements Logger { 
    @Override public String getName() { return "no"; } 
    @Override public void warn(String msg, Object... args) { } 
    @Override public void warn(Throwable thrown) { } 
    @Override public void warn(String msg, Throwable thrown) { } 
    @Override public void info(String msg, Object... args) { } 
    @Override public void info(Throwable thrown) { } 
    @Override public void info(String msg, Throwable thrown) { } 
    @Override public boolean isDebugEnabled() { return false; } 
    @Override public void setDebugEnabled(boolean enabled) { } 
    @Override public void debug(String msg, Object... args) { } 
    @Override public void debug(Throwable thrown) { } 
    @Override public void debug(String msg, Throwable thrown) { } 
    @Override public Logger getLogger(String name) { return this; } 
    @Override public void ignore(Throwable ignored) { } 
} 
+0

Nota: esto no es apropiado para Jetty 6.1 (como la pregunta indicada). El espacio del paquete 'org.eclipse.jetty' no existía hasta Jetty 7.0 –

+0

La respuesta a continuación por @ arcuri82 es la configuración más adecuada (sin código personalizado) para lograr su objetivo final. –

6
System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); 
System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); 

Esto funcionó para mí, pero sólo asegúrese de llamar antes de iniciar el servidor.

+0

Esta es la respuesta correcta para Jetty 7.0+ –

+0

Esto funciona, ¡gracias! – Ehsan

Cuestiones relacionadas