Supprimer toute sortie Logback sur la console?

comment configurer Logback pour supprimer toute sa sortie vers la console (sortie standard)? En particulier, je souhaite supprimer (ou rediriger) les propres messages de logback tels que:

16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,923 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
16:50:25,924 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@1a15291 - Will scan for changes in file [/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] every 60 seconds. 

je dois désactiver toute journalisation à la sortie standard parce que notre environnement de production empêche les applications d'imprimer des messages à la sortie standard.

Note j'utilise Logback 0.9.21, SLF4J 1.6.0, et notre application fonctionne en WebLogic 10.3.2.

51
demandé sur Derek Mahar 2010-08-04 01:51:51

10 réponses

ces messages ne s'affichent que si au moins un des éléments suivants est vrai:

  • vous avez le débogage activé dans le logback.fichier xml
  • vous avez une erreur dans votre configuration. C'est le cas ici - logback se plaint de plusieurs fichiers de configuration trouvés.
  • il y a un problème classpath si votre environnement fournit des fichiers contradictoires. (il m'est arrivé hier et a été la véritable cause de cette question.)
  • (il y a un bug dans logback - qui s'est passé)

corriger la question et ces messages devraient disparaître.

38
répondu Thorbjørn Ravn Andersen 2016-11-07 14:13:40

Holger Hoffstätte avait raison dans son diagnosis que le message d'entrée dupliqué classpath est un symptôme d'un bug dans how Logback counts classpath entries. Robert Elliot également caractérisé le problème dans un thread sur le Logback liste de diffusion de l'utilisateur . Selon Robert et d'autres dans ce rapport disssion sur le mailing SLF4J list, quand une application qui utilise le Logback tourne dans un conteneur WebLogic, en raison de la façon dont le classloader WebLogic fonctionne, le Logback rapporte des entrées de classpath dupliquées pour le fichier de configuration logback.xml . Cependant, indépendamment du fait que le classloader de WebLogic devrait ou ne devrait pas rapporter seulement les entrées uniques de classpath, la journalisation devrait certainement compter seulement les entrées uniques de classpath de sorte qu'il n'imprime pas ce message confus et fallacieux.

j'ai mis en place un fix pour LBCLASSIC-159 qui fait essentiellement de ce que Robert Elliot recommande et utilise un ensemble au lieu d'une liste de tenir les ressources que le chargeur de classe renvoie, de manière efficace d'éliminer tous les doublons de classpath ressources. J'ai testé avec succès le correctif avec Logback 0.9.24, SLF4J 1.6.1, et WebLogic 10.3.2. Comme Thorbjørn l'a prédit dans sa réponse 151930920", avec ce correctif en place, Logback n'affiche plus le duplicata les messages d'état d'entrée classpath (ou n'importe lequel des autres messages informationnels) à la sortie standard.

j'espère que les responsables intégreront mon correctif dans le Logback principal source code repository et l'incluront dans la prochaine version.

16
répondu Derek Mahar 2017-05-23 12:10:19

C'est un "moi aussi" en réponse, désolé!

heureusement, j'ai trouvé une solution (Voir mise à jour) ci-dessous.

contrairement à certaines autres réponses, je reçois un flux de messages de configuration LogBack INFO malgré l'absence de ERROR s ou WARN s dans la phase de configuration.

Voici mes messages:

13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/carl/workspace-LSY/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml]
13:39:20,496 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@14e2c9c - Will scan for changes in file [/home/carl/workspace-LSY/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml] every 60 seconds. 
13:39:20,496 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
13:39:20,497 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:39:20,501 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [encoder] on top of the object stack.
13:39:20,537 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
13:39:20,537 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [ch.qos.logback] to false
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

voici ma configuration:

<configuration debug="true" scan="true"> 

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>

  <logger name="ch.qos.logback" level="OFF" additivity="false" />

</configuration>

c'est du spam que je ne veux pas, je me considère innocent de l'avoir provoqué, et j'apprécierais de l'aide pour m'en débarrasser.

l'un des points sur lesquels je peux être" coupable "est que j'initialise mes loggers dans une variable static ; les docs recommandent d'utiliser des variables d'instance à la place.

Versions:

  • logback-classic-0.9.24.jar
  • logback-core-0.9.24.jar
  • slf4j-api-1.6.1.jar
  • exécution dans une application IceFaces 2.0 tournant dans Tomcat 6.0 sous Ubuntu 11.04

mise à jour

a finalement compris quel était le problème!

à Partir de l'amende manuel (et Thorbjørn la réponse de ):

Définir l'attribut de débogage dans l'élément produira des informations sur l'état, en partant de l'hypothèse que

  1. le fichier de configuration se trouve
  2. le fichier de configuration est bien formé XML.

mon erreur était

<configuration debug="true" scan="true"> 

En rétrospective, duh! espérons que cette information aidera les autres.

15
répondu Carl Smotricz 2017-05-23 12:10:19

donc j'ai eu le MÊME PROBLÈME MAIS j'ai trouvé que supprimer la mauvaise entrée qui était dépréciée quelque part autour de 0.9.4 et les messages ont disparu...

Vous appender devrait ressembler à quelque chose comme

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>info</level>
 </filter>

 <encoder>
  <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss} %.-1level %thread %logger{36}: %m%n</pattern>
 </encoder>

</appender>

j'ai blogué sur un plus complète description de ce que j'ai changé qui a fonctionné pour moi

8
répondu Michael McCallum 2012-05-02 12:26:41

Je ne suis pas familier avec Logback. Mais si c'est l'impression System.out ou System.err , ce sont simplement des variables publiques statiques PrintStream dans la classe System . Vous pouvez sous-classe PrintStream et définir les variables de sortie du système à votre sous-classe, contrôlant ainsi comment cela fonctionne.

par exemple:

public class NOPPrintStream extends PrintStream
{
    public NOPPrintStream() { super((OutputStream)null); }

    public void println(String s) { /* Do nothing */ }
    // You may or may not have to override other methods
}

public class MyClass
{
    public static void main(String[] args)
    {
        System.out = new NOPPrintStream();
        // Start program
    }
}

(ce code n'a pas été testé)

3
répondu Brian S 2010-08-03 22:02:14

dans mon cas, j'ai eu le" logback-test.xml" dans un projet dépendant qui était en cours de déploiement comme un jar webapp. Le " logback-test.xml" fichier

<configuration debug="false" scan="true">

l'attribut scan= "true" 'a généré cette erreur:

ERROR in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@716de067 - URL [jar:file:/C:/Local...cut.../WEB-INF/lib/My.Dev.jar!/logback-test.xml] is not of type file

qui a abouti à 67 (!) plus d'INFOS lignes.

en supprimant l'attribut 'scan=" true"', le logback a complètement disparu.

2
répondu xtian 2012-05-08 09:21:47

en fait le fait que le même logback.la localisation xml est signalée plusieurs fois semble plus ressembler à un bogue dans logback qu'à toute autre chose. Signalez ceci à la JIRA de retour ( ici ) ou vérifiez d'abord si le bocal en question Est sur le chemin de classe plusieurs fois.

2
répondu Holger Hoffstätte 2015-09-04 19:34:05

Vous avez probablement un élément configuré dans votre logback.XML. Vous pouvez le supprimer, si vous ne voulez pas de mises à jour de la console sur l'état du framework de journalisation lui-même. Cependant, logback framework recommande de ne pas le désactiver pour des raisons de dépannage.

il existe une alternative à L'écouteur de la console appelé StatusListenerAsList qui conserve les messages d'état en tant que liste privée. Vous pouvez l'exposer via JMX, si nécessaire, avec un peu de code.

1
répondu baja 2011-12-06 02:15:06

je veux juste ajouter des informations sur le message d'en-tête par défaut ajouté dans logback 1.0.2:

#logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n

j'ai trouvé que dans logback news , mais il était vraiment difficile de trouver.

si vous souhaitez supprimer ce message, vous devez configurer outputPatternAsPresentationHeader à false:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
        <!-- do not print pattern as a header -->
        <outputPatternAsPresentationHeader>false</outputPatternAsPresentationHeader>
    </encoder>
</appender>
1
répondu Betlista 2012-05-02 12:21:46
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
</configuration>

utilisez simplement la classe NopStatusLinstener et cela arrêtera l'auto-journalisation de logback.

0
répondu Rupesh Kumar 2018-04-23 07:24:26