Подавить все выходные данные Logback на консоль? - PullRequest
52 голосов
/ 04 августа 2010

Как я могу настроить Logback для подавления всех его выводов на консоль (стандартный вывод)?В частности, я хочу подавить (или перенаправить) собственные сообщения журнала Logback, такие как:

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. 

Мне нужно отключить все журналы на стандартный вывод, потому что наша производственная среда не позволяет приложениям печатать любые сообщения на стандартныйoutput.

Примечание. Я использую Logback 0.9.21, SLF4J 1.6.0, и наше приложение работает в WebLogic 10.3.2.

Ответы [ 10 ]

40 голосов
/ 04 августа 2010

Эти сообщения отображаются, только если верно хотя бы одно из следующего:

  • у вас включена отладка в файле logback.xml
  • у вас есть ошибка в вашей конфигурации. Это тот случай, когда logback жалуется на обнаружение нескольких файлов конфигурации.
  • существует проблема с classpath, если ваша среда предоставляет конфликтующие файлы. (это произошло со мной вчера и было настоящей причиной этого вопроса).
  • (при выходе из системы произошла ошибка)

Исправьте проблему, и эти сообщения должны исчезнуть.

16 голосов
/ 05 августа 2010

Хольгер Хоффштетт был прав в своем диагнозе , что повторяющееся сообщение о записи пути к классам является признаком ошибки в том, как Logback подсчитывает записи пути к классам.Роберт Эллиот также охарактеризовал проблему в потоке в списке рассылки пользователя .Согласно Роберту и другим авторам в этом связанном обсуждении в списке рассылки SLF4J, когда приложение, использующее Logback, запускается в контейнере WebLogic, из-за способа работы загрузчика классов WebLogic, Logback сообщает о дублированных записях пути к классам для logback.xml файл конфигурации.Однако независимо от того, должен ли загрузчик классов WebLogic сообщать или не сообщать только об уникальных записях о пути к классам, Logback, безусловно, должен учитывать только уникальные записи о пути к классам, чтобы он не печатал это запутанное ложное сообщение.

Я реализовал fix для LBCLASSIC-159 , который по существу делает то, что рекомендует Роберт Эллиот, и использует набор вместо списка для хранения ресурсов, которые возвращает загрузчик классов, эффективно устраняя любые дублирующиеся ресурсы пути к классам.Я успешно протестировал исправление с помощью Logback 0.9.24, SLF4J 1.6.1 и WebLogic 10.3.2.Как и предсказывал Турбьерн в своем ответе , с этим исправлением Logback больше не отображает дублирующиеся сообщения о состоянии записи пути к классам (или любые другие информационные сообщения) для стандартного вывода.

Надеюсьчто сопровождающие будут интегрировать мое исправление в основной репозиторий исходного кода Logback и включить его в следующий выпуск.

15 голосов
/ 12 октября 2011

Это ответ "Я тоже", извините!

К счастью, я нашел решение (см. ОБНОВЛЕНИЕ) ниже.

Вопреки другим ответам, я получаю поток сообщений конфигурации INFO LogBack, несмотря нане имея ERROR с или WARN с на этапе конфигурации.

Вот мои сообщения:

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.

Вот моя конфигурация:

<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>

Этоэто спам, которого я не хочу, я считаю себя невиновным в том, что спровоцировал его, и я был бы признателен за помощь в его избавлении.

Единственное уважение, в котором я могу быть «виноватым», заключается в том, что яm инициализация моих регистраторов в переменной static;Документы рекомендуют использовать переменные экземпляра.

Версии:

  • logback-classic-0.9.24.jar
  • logback-core-0.9.24.jar
  • slf4j-api-1.6.1.jar
  • выполнение в приложении IceFaces 2.0, запущенном в Tomcat 6.0 под Ubuntu 11.04

ОБНОВЛЕНИЕ

Наконец выяснили, в чем проблема!

С прекрасное руководство Ответ Торбьерна ):

Установка атрибута отладки внутри элемента будет выводить информацию о состоянии, при условии, что

  1. файл конфигурации найден
  2. файл конфигурации исправенXML-формат.

Моя ошибка была

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

Оглядываясь назад, Дух! Надеюсь, эта информация поможет другим.

8 голосов
/ 28 сентября 2010

Итак, у меня возникла та же проблема, но я обнаружил, что удаление неправильногозапись, которая устарела где-то в районе 0.9.4, а сообщения исчезли ...

Ваш аппендант должен выглядеть примерно так:

<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>

Я уже писал о более завершенных описание того, что я изменил, что сработало для меня

3 голосов
/ 04 августа 2010

Я не знаком с Logback.Но если он печатает в System.out или System.err, это просто открытые статические PrintStream переменные в классе System.Вы можете создать подкласс PrintStream и установить системные выходные переменные для вашего подкласса, таким образом управляя его работой.

Например:

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
    }
}

(Этот код не проверен)

2 голосов
/ 08 мая 2012

В моем случае у меня был «logback-test.xml» в зависимом проекте, который развертывался как jar веб-приложения. Файл «logback-test.xml» начался с

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

Атрибут 'scan = "true"' сгенерировал эту ошибку:

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

, что привело к 67 (!) Дополнительным строкам INFO.

При удалении атрибута 'scan = "true"' журнал регистрации полностью исчез.

2 голосов
/ 04 августа 2010

На самом деле тот факт, что одно и то же местоположение logback.xml сообщается несколько раз, больше напоминает ошибку в logback, чем что-либо еще.Либо сообщите об этом в журнал JIRA ( здесь ), либо сначала проверьте, находится ли рассматриваемая банка в пути к классам несколько раз.

1 голос
/ 23 апреля 2018
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
</configuration>

Просто используйте класс NopStatusLinstener, и это прекратит самостоятельную запись в журнал.

1 голос
/ 02 мая 2012

Я просто хочу добавить информацию о заголовке сообщения по умолчанию, добавленном в logback 1.0.2:

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

Я нашел это в logback news , но найти его было действительно сложно.

Если вы хотите удалить это сообщение, вы должны установить для 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 голос
/ 06 декабря 2011

Скорее всего, в вашем logback.xml настроен элемент.Вы можете удалить его, если вы не хотите никаких обновлений консоли о состоянии самой структуры журналирования.Однако среда logback рекомендует не отключать ее в целях устранения неполадок.

Существует альтернатива прослушивателю консоли, называемая StatusListenerAsList, которая сохраняет сообщения о состоянии в качестве личного списка.Вы можете открыть его через JMX, если нужно, с небольшим количеством кода.

...