Отключить весь вывод журнала на консоль?
Как настроить 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 [email protected] - Will scan for changes in file [/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] every 60 seconds.
Мне нужно отключить все протоколирование до стандартного вывода, потому что наша производственная среда запрещает приложениям печатать сообщения на стандартный вывод.
Примечание. Я использую Logback 0.9.21, SLF4J 1.6.0, и наше приложение работает в WebLogic 10.3.2.
Ответы
Ответ 1
Хольгер Хоффштетт был прав в своем диалоге , что дублирующее сообщение о входе в класс пути является симптомом ошибка в том, как Logback подсчитывает записи в классе. Роберт Эллиот также охарактеризовал проблему в thread on журнал список рассылки пользователей. Согласно Роберту и другим в этом связанном disussion в списке рассылки SLF4J, когда приложение, использующее Logback, запускается в контейнере WebLogic, из-за как работает загрузчик классов WebLogic, отчеты об ошибках дублируют записи в классе для конфигурационного файла logback.xml
. Однако, независимо от того, должен ли загрузчик классов WebLogic должен или не должен указывать только уникальные записи в classpath, Logback должен обязательно подсчитывать только уникальные записи pathpath, чтобы он не печатал это запутанное ложное сообщение.
Я применил fix для LBCLASSIC-159 что по существу делает то, что Роберт Эллиот рекомендует и использует набор вместо списка для хранения ресурсов, возвращаемых загрузчиком классов, эффективно устраняя любые дублированные ресурсы класса. Я успешно протестировал исправление с помощью Logback 0.9.24, SLF4J 1.6.1 и WebLogic 10.3.2. Как предсказал Thorbjørn в своем ответе , с этим исправлением в журнале Logback больше не отображается дублирующее сообщение о статусе пути пути (или любое другое информационное сообщение) к стандартным выводам.
Я надеюсь, что сопровождающие меня будут интегрировать мое исправление в основной репозиторий исходный код и включить его в следующую версию.
Ответ 2
Эти сообщения показывают, действительно ли хотя бы одно из следующих значений:
- У вас есть отладка включена в файле logback.xml
- у вас есть ошибка в вашей конфигурации. В этом случае - logback жалуется на обнаружение нескольких файлов конфигурации.
- существует проблема с classpath, если ваша среда предоставляет конфликтующие файлы. (вчера это произошло со мной и было настоящей причиной этого вопроса).
- (есть ошибка в logback - произошло)
Исправить проблему, и эти сообщения должны исчезнуть.
Ответ 3
Это ответ "я тоже", извините!
К счастью, я нашел решение (см. UPDATE) ниже.
Вопреки некоторым другим ответам, я получаю поток конфигурационных сообщений LogBack INFO
, несмотря на отсутствие 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 [email protected] - 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>
Это спам, которого я не хочу, я считаю себя невиновным из-за его провокации, и я был бы признателен за помощь в избавлении от него.
Одно уважение, в котором я могу быть "виновным", заключается в том, что я инициализирую свои регистраторы в переменной static
; документы рекомендуют вместо этого использовать переменные экземпляра.
Версии:
- Logback-классический 0.9.24.jar
- Logback-ядро-0.9.24.jar
- SLF4J-апи-1.6.1.jar
- выполняется в приложении IceFaces 2.0, работающем в Tomcat 6.0 под Ubuntu 11.04
UPDATE
Наконец выяснилось, в чем проблема!
Из точное руководство (и ответ Thorbjørn):
Установка атрибута отладки внутри элемента будет выводить информацию о состоянии в предположении, что
- найден файл конфигурации
- конфигурационный файл имеет хорошо сформированный XML.
Моя ошибка была
<configuration debug="true" scan="true">
В ретроспективе, дух! Надеюсь, эта информация поможет другим.
Ответ 4
Итак, у меня была та же проблема, но обнаружил, что удаление неправильной записи < layout/" > , которая была устарела где-то около 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>
Я написал о более полное описание того, что я изменил, что сработало для меня
Ответ 5
Я не знаком с 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
}
}
(Этот код не проверен)
Ответ 6
Фактически тот факт, что одно и то же имя logback.xml сообщается несколько раз, больше похоже на ошибку в logback, чем что-либо еще. Либо сообщите об этом в журнал JIRA (здесь), либо сначала проверьте, является ли рассматриваемая банка многократной переменной класса.
Ответ 7
В моем случае у меня был "logback-test.xml" в зависимом проекте, который развертывался как баннер webapp.
Файл "logback-test.xml" начинался с
<configuration debug="false" scan="true">
Атрибут 'scan = "true" "сгенерировал эту ошибку:
ERROR in [email protected] - URL [jar:file:/C:/Local...cut.../WEB-INF/lib/My.Dev.jar!/logback-test.xml] is not of type file
что привело к 67 (!) более INFO-линиям.
Удалив атрибут "scan =" true "", журнал журнала исчез полностью.
Ответ 8
У вас, скорее всего, есть элемент, настроенный в вашем файле logback.xml. Вы можете удалить его, если вам не нужны какие-либо обновления консоли о состоянии самой системы ведения журнала. Несмотря на это, система резервирования рекомендует отключить ее для устранения неполадок.
Существует альтернатива слушателю консоли, называемому StatusListenerAsList, который сохраняет сообщения о состоянии как частный список. Вы можете разоблачить его через JMX, если необходимо, с небольшим количеством кода.
Ответ 9
Я просто хочу добавить информацию о сообщении заголовка по умолчанию, добавленном в logback 1.0.2:
#logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n
Я обнаружил, что в новости журнала, но было действительно трудно найти.
Если вы хотите удалить это сообщение, вам нужно настроить 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>