当前位置: 首页 > 知识库问答 >
问题:

是否可以使用logback.xml从ch.qos.logback获取日志消息?

李安歌
2023-03-14

我成功地为应用程序使用了logback,但无法从ch.qos.logback记录消息。我知道一个无法记录初始消息(下面的回答确认了这一点),这是有意义的。我不明白的是,为什么我还不能记录logback完成自身配置后生成的消息。

因此,没有办法告诉Logback将它自己的on-startup-log-events定向到文件附加器。

<?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)
13:05:07.966 [main] ERROR xxx- error to use for debugging logging~

由ch.qos.logback.classic.net.smtpappender生成的消息遵循与启动消息相同的模式,而不是我在appender STDOUT中定义的模式,这表明它们甚至没有使用我的STDOUT appender。此外,它们甚至没有出现在testFile appender输出中。

有谁能说说这事吗?我已经读了文件,做了这个测试,没有进一步的途径了。

共有1个答案

西门靖琪
2023-03-14

Logback不使用记录器报告自己的日志输出。Logback自己的日志被称为“状态消息”。请参阅关于状态打印和状态侦听器的文档

 类似资料:
  • 我是JUnit4的新手,我习惯于用Google测试C。我使用assertEquals()编写了一段包含许多检查的代码。我想它会输出一些日志信息,告诉用户检查是否成功以及原因,然后继续下一步的操作。但它正在阻止死刑的执行。 我已经搜索了这个主题,似乎JUnit的设计与Google Test不同,所以我应该对每个断言使用@Test方法。但是有没有其他方法可以得到我想要的东西?我读到了验证方法而不是断言

  • 问题内容: 我如何禁用Spring日志以使其具有我可以轻松阅读或其他人可以阅读的日志输出。关于如何禁用spring bean加载日志的类似问题的答案建议注释掉中的所有行。就我而言,没有这样的行。 这是 问题答案: 对于未明确指定的所有内容,默认日志记录为DEBUG。因此,所有内容都记录在该级别(根据你的配置判断),基本上,你正在泛滥日志。你不应删除org.springframework的记录器,而

  • 假设我对同一个消息键有不同的值。 例如: 在上述情况下,我只需要用户更新的最新值,即“user789@xyz.com”。 我的kafka流应该只给我第三个值,而不是前两个值。

  • 问题内容: 我正在使用Python的机制将输出打印到屏幕上。我可以使用print语句来做到这一点,但是我想允许用户调整更好的粒度以禁用某些类型的输出。我喜欢为错误打印的格式,但是当输出级别为“信息”时,我希望使用更简单的格式。 例如: 在此示例中,我希望以不同的方式打印错误的格式: 是否可以在没有多个日志记录对象的情况下针对不同的日志级别使用不同的格式?我宁愿在创建记录器后就不修改它,因为有大量的

  • 问题内容: 我想抢先获取要在中加载的网页的HTML代码,使用正则表达式解析它,并仅显示所需的HTML代码,同时让该网页仍然认为它已加载了所有内容。 有什么方法可以通过或类似方法来做到这一点? 编辑:我尝试过此: 该接口永远不会被调用 问题答案: 不得不使用HttpClient。无需Cookie,只需解析html:

  • 问题内容: 我正在寻找如何使用golang从Kubernetes集群中的Pod获取日志的解决方案。我看过“ https://github.com/kubernetes/client- go ”和“ https://godoc.org/sigs.k8s.io/controller- runtime/pkg/client ”,但听不懂如何将它们用于此目的。除了日志外,我在获取K8S中的Pod或任何其他