Я успешно использую logback для приложения, но не могу записывать сообщения из ch.qos.logback. Я знаю, что невозможно записать начальные сообщения (ответы ниже подтверждают это), и это имеет смысл. Чего я не понимаю, так это того, почему я не смог записать в журнал сообщения, сгенерированные после того, как logback завершил сам конфигурирование.
Таким образом, невозможно указать Logback направлять свои собственные события при запуске в файл-приложение.
"Первый вывод журнала с помощью ch.qos.logback не может быть перенаправлен с использованием конфигурации журнала, поскольку этот вывод происходит, когда Logback считывает его конфигурацию -> проблема стиля курица / яйцо."
logback.xml (этот точный код будет генерировать сообщения об ОШИБКАХ из ch.qos.logback.classic.net.SMTPAppender, если ему не удается войти на сервер электронной почты):
<?xml version="1.0" encoding="UTF-8"?>
<!-- see http://logback.qos.ch/manual/configuration.html -->
<configuration scan="true" debug="true">
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg~%n</Pattern>
</encoder>
</appender>
<appender name="testFile" class="ch.qos.logback.core.FileAppender">
<file> testFile.txt </file>
<append>false</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg~%n</Pattern>
</encoder>
</appender>
<appender name="GMAIL_EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.gmail.com</smtpHost>
<smtpPort>587</smtpPort>
<asynchronousSending>true</asynchronousSending>
<username>xxx</username>
<password>xxx</password>
<STARTTLS>true</STARTTLS>
<to>xxx</to>
<from>xxx</from>
<subject>Error: %logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg~%n</Pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="testFile" />
<appender-ref ref="GMAIL_EMAIL" />
</root>
<logger name="ch.qos.logback" level="DEBUG" >
</logger>
</configuration>
вывод консоли отладки:
13:05:07,626 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [conf\logback.xml] at [file:/C:/OleAppnWorkArea/staging__unity_group14b/conf/logback.xml]
13:05:07,806 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\OleAppnWorkArea\staging__unity_group14b\conf\logback.xml]] every 60 seconds.
13:05:07,806 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
13:05:07,806 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Using current interpretation time, i.e. now, as time reference.
13:05:07,816 |-INFO in ch.qos.logback.core.joran.action.TimestampAction - Adding property to the context with key="bySecond" and value="20181109T130507" to the LOCAL scope
13:05:07,816 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:05:07,816 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
13:05:07,882 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.FileAppender]
13:05:07,887 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [testFile]
13:05:07,897 |-INFO in ch.qos.logback.core.FileAppender[testFile] - File property is set to [testFile.txt]
13:05:07,899 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.net.SMTPAppender]
13:05:07,910 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [GMAIL_EMAIL]
13:05:07,950 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
13:05:07,950 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
13:05:07,951 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [testFile] to Logger[ROOT]
13:05:07,951 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [GMAIL_EMAIL] to Logger[ROOT]
13:05:07,952 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to DEBUG
13:05:07,952 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
13:05:07,953 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@481a996b - Registering current configuration as safe fallback point
13:05:07.966 [main] ERROR xxx - error to use for debugging logging~
13:05:07,972 |-INFO in ch.qos.logback.classic.net.SMTPAppender[GMAIL_EMAIL] - SMTPAppender [GMAIL_EMAIL] is tracking [1] buffers
13:05:07,997 |-INFO in ch.qos.logback.classic.net.SMTPAppender[GMAIL_EMAIL] - About to send out SMTP message "Error: xxx - error to use for debugging logging" to [xxx]
13:05:09,019 |-ERROR in ch.qos.logback.classic.net.SMTPAppender[GMAIL_EMAIL] - Error occurred while sending e-mail notification. javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials o27-v6sm5469472wro.24 - gsmtp at javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 https://support.google.com/mail/?p=BadCredentials o27-v6sm5469472wro.24 - gsmtp
at at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:965)
at at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:876)
at at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:780)
at at javax.mail.Service.connect(Service.java:388)
at at javax.mail.Service.connect(Service.java:246)
at at javax.mail.Service.connect(Service.java:195)
at at javax.mail.Transport.send0(Transport.java:254)
at at javax.mail.Transport.send(Transport.java:124)
at at ch.qos.logback.core.net.SMTPAppenderBase.sendBuffer(SMTPAppenderBase.java:394)
at at ch.qos.logback.core.net.SMTPAppenderBase$SenderRunnable.run(SMTPAppenderBase.java:677)
at at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at at java.lang.Thread.run(Thread.java:748)
testFile.txt содержит только:
13:05:07.966 [main] ERROR xxx- error to use for debugging logging~
Сообщения, сгенерированные ch.qos.logback.classic.net.SMTPAppender, следуют тому же шаблону, что и сообщения при запуске, а не шаблону, который я определил в appDD STUTUT, предполагая, что они даже не используют мой appDDUT. Кроме того, они даже не отображаются в выводе приложения testFile.
Может кто-нибудь пролить свет на это, пожалуйста? Я прочитал документы и провел это тестирование, и у меня больше нет никаких путей.