2010-01-22 5 views
14

J'essaie d'intégrer Jetty 6.1 dans un autre programme. Jetty jette des informations sur le journal INFO et je dois l'éteindre. Existe-t-il un moyen simple de désactiver la journalisation programmatique?Jetty: comment désactiver la journalisation?

+4

Avez-vous trouvé la solution? Que diriez-vous de mettre à jour votre message! ?? –

Répondre

5

Dans Jetty Embedded, vous pouvez essayer: org.mortbay.log.Log.setLog (null); Avant l'appel du serveur.

+1

indice: ** avant ** le serveur d'appel est important –

3

J'ai réussi à créer un enregistreur factice qui supprime tout ce qu'il est demandé de consigner, puis le transmet au 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) {} 

} 

Pour référence, j'utilisé ces paquets:

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

au lieu des mortbay, mais ils devraient probablement se comporter de la même (ou au moins de la même).

1

regardant le debugging page mentionné par Vinay:

Ponton utilise l'infrastructure de journalisation SLF4J à combler à commons-logging pour JSP2.0. Cela signifie que les messages de journal communs sont envoyés à l'interface SLF4J.

Nous expédions l'implémentation du journal simple, qui ne restitue que les messages de niveau INFO et supérieurs à stderr.

Cependant, vous pouvez remplacer le journal simple avec une autre implémentation du journal SLF4J en supprimant le répertoire lib/jsp-2.0/slf4j-simple-1.0-rc5.jar et la copie dans les impl SLF4J de votre choix. Le code de base de Jetty a une dépendance douce sur SLF4J, ce qui signifie que si une implicite SLF4J est trouvée sur le chemin de classe au démarrage, Jetty lui enverra tous les messages de journalisation.

Vous pouvez retirer les bocaux de SLF4J complètement et utiliser commons-logging place en copiant dans le pot commons-logging et un commons-logging impl journaux conformes, tels que log4j, la lib /. Cependant, si vous faites cela, sachez que le code de base de Jetty n'utilise pas commons-logging, il enregistrera les messages dans stderr à la place. Lisez la suite pour apprendre comment obtenir le mécanisme du journal stderr pour imprimer les messages de niveau DEBUG.

Il s'agit donc de mettre le bon fichier jar. Par exemple, vous pouvez mettre une interface compatible log4j et configurer votre fichier de configuration log4j correctement pour rendre muettes les instructions de journalisation de jetty ou être plus bavard.

3

Réglez le niveau StdErrLog-WARN, avant de commencer votre serveur:

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

Cela semble fonctionner, bien qu'il n'y ait pas d'option 'NONE'. 'Attendre seulement [ALL, DEBUG, INFO, WARN]' –

+0

@ThomasAhle c'est vrai, mais je suis d'accord avec leur choix. Ce n'est pas vraiment une bonne idée d'empêcher toute erreur d'apparaître dans le journal. –

+0

@ThomasAhle Il semble y avoir une option 'OFF':' $ {name | hierarchy} .LEVEL = (TOUT | DEBUG | INFO | WARN | OFF) ', source: http://download.eclipse.org/jetty /9.3.6.v20151106/apidocs/org/eclipse/jetty/util/log/StdErrLog.html – m4rtin

11

Une version plus concise de la réponse 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

Remarque: ceci n'est pas approprié pour Jetty 6.1 (comme l'indique la question). L'espace de paquetage 'org.eclipse.jetty' n'existait pas jusqu'à Jetty 7.0 –

+0

La réponse ci-dessous par @ arcuri82 est la configuration la plus appropriée (pas de code personnalisé) pour atteindre votre objectif final. –

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

Cela a fonctionné pour moi, mais il suffit de l'appeler avant de démarrer le serveur.

+0

Ceci est la bonne réponse pour Jetty 7.0+ –

+0

Cela fonctionne, merci! – Ehsan

Questions connexes