Comment empêcher logback de sortir son propre statut au début de chaque log?

cela ressemble à une erreur de négligence, mais je ne semble pas trouver la cause. Journalisation avec logback / slf4j (version la plus récente slf4j-api-1.6.1, logback core/classic 0.9.24). La configuration la plus simple pour tester est:

<configuration>
 <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  <layout class="ch.qos.logback.classic.PatternLayout">
   <!-- DONT USE THIS FORMATTER FOR LIVE LOGGING THE %L LINE NUMBER OUTPUTTER IS SLOW -->
   <pattern>%le %-1r [%c{1}:%L] %m%n</pattern>
  </layout>
 </appender>
 <root level="DEBUG">
  <appender-ref ref="stdout" />
 </root>
</configuration>

chaque configuration de log commence avec les lignes d'état internes de logback:

11:21:27,825 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
11:21:27,826 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:.../logback-test.xml]
11:21:28,116 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
11:21:28,124 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
11:21:28,129 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
11:21:28,180 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [layout] on top of the object stack.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - This appender no longer admits a layout as a sub-component, set an encoder instead.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
11:21:28,206 |-WARN in ch.qos.logback.core.ConsoleAppender[stdout] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
11:21:28,207 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
11:21:28,207 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]

qui est, selon les docs, le format de logback utilise par défaut. Il termine alors la lecture de la config (qui est mis en place pour sortie d'un format différent) et continue avec la sortie correctement formatée. Il y a un paramètre de configuration <configuration debug="false"> qui n'affecte pas ceci.

quelqu'un sait comment arrêter cela?

105
demandé sur approxiblue 2010-07-15 19:32:57

8 réponses

si vous définissez l'attribut debug de l'élément configuration à true , vous obtiendrez toutes les informations d'état sur la console. Si c'est votre problème, mettez-le à false ou supprimez-le.

si vous avez des problèmes de configuration du niveau WARN ou plus, vous obtiendrez également toutes les informations d'état enregistrées sur la console (y compris les messages du niveau INFO ). La meilleure solution à ce problème consiste à résoudre le problème (dans votre cas remplacer l'élément <layout> par un élément <encoder> ).

si, pour une raison quelconque, vous ne pouvez pas résoudre le problème, mais que vous voulez supprimer les informations de statut de la console, vous pouvez configurer une alternative StatusListener . Utilisez le NopStatusListener pour supprimer complètement le statut-informations:

<configuration>
  <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
  <!-- etc -->
</configuration>
177
répondu Rasmus Faber 2017-08-09 20:02:12

comme décrit dans le docs , si des avertissements ou des erreurs se produisent pendant l'analyse du fichier de configuration, logback affichera automatiquement les données d'état sur la console.

suit http://logback.qos.ch/codes.html#layoutInsteadOfEncoder i.e. le lien mentionné par logback dans son message d'avertissement. Une fois que vous suivez les étapes mentionnées, qui est, si vous remplacez élément , logback va s'arrêter impression de messages sur la console.

40
répondu Ceki 2010-07-15 21:55:37

Ceki la réponse est correcte:

(...si des avertissements ou des erreurs se produisent pendant l'analyse du fichier de configuration, logback imprimera automatiquement les données d'état sur la console.

une fois que vous aurez fait le bon choix, il n'y aura plus de pollution dans les premières lignes de votre rondin.

depuis mars 2015, dans Logback 1.1.2 , vous devez utiliser <encoder> sous-component - <layout> est maintenant déprécié et si vous l'utilisez, des messages d'erreur apparaîtront. Vous ne pouvez pas contrôler cela, son comportement par défaut Logback .

certaines classes internes ont aussi été renommées, et même les exemples de leur page de manuel sont dépassés!

voici le code extrait de leur page D'aide de code D'erreurs , qui a la bonne façon de configurer l'enregistreur. Cela corrige le problème complètement dans mon projet. http://logback.qos.ch/codes.html#layoutInsteadOfEncoder

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>testFile.log</file>
  ...
  <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <pattern>%msg%n</pattern>
  </encoder>
</appender>
6
répondu Cbaldan 2015-03-07 16:32:31

J'ai réalisé que Steve avait trouvé la solution mais il ne l'a pas mentionnée sur le fil. Dans le cas où une autre personne frappe la même question voici le correctif.

remplacer" "elements par" < encoder>.." c'est le coupable..

4
répondu Intesar Mohammed 2013-01-15 01:14:13

cela semble être fixé à 0.9.29. Viens de faire plusieurs tests. Pas de Joran INFO plus. Je suppose que ce est la commit de fixation.

2
répondu Michael-O 2016-07-13 07:35:57

S'est battu avec le même problème moi-même i.e. il y avait un tas de lignes enregistrées au début qui n'étaient pas liées à mon code. Voici comment je l'ai corrigé.

<configuration debug="false">

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level 
        %logger{36} - %msg%n</pattern> </encoder> -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{10} - %msg%n</pattern>
    </encoder>
</appender>

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

<logger name="fun.n.games" level="DEBUG" />

C'est en cours d'exécution avec l'entrée suivante dans le pom.xml

        <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
1
répondu kaun jovi 2017-07-14 10:12:01

j'ai tout essayé et rien n'a fonctionné pour moi. Mon problème était dû à plusieurs logback.fichiers xml dans mon classpath. C'est le cas dans les projets multi-modulaires. Quand il y a un seul logback.fichier xml dans classpath, il n'y a pas d'ambiguïté et le problème est résolu.

0
répondu Filip 2015-01-22 11:03:25

utilisant la logback.groovy : statusListener(NopStatusListener) (dans le src/test/resources/logback.groovy ) travaux.

(un cas d'utilisation valide est par exemple si vous travaillez avec ANT dans Eclipse, en utilisant la journalisation logback, les classes groovy et les tests unitaires où les tests unitaires prennent le src/test/resources/logback.groovy , mais vous verrez aussi le src/main/resources/logback.groovy (ou similaire) que vous ne pouvez pas exclure (si on dit que le classpath de ANT utilise le classpath projects).)

0
répondu Andreas Dietrich 2018-04-18 10:49:04