JAVA 中的 DEBUG 日志轮换

DEBUG log rotation in JAVA

在生产环境(例如)中,我们经常使用 INFO 日志级别,因为使用 DEBUG 日志时,大小会迅速变大。

我知道可以使用 SLJ4J 或 LOG4J 配置日志轮换以拆分文件等。 但大多数时候,我们只需要出现异常时的 DEBUG 日志,这样我们就可以获得更多信息(例如 HTTP 请求日志)。

我想知道是否可以只保留(例如)1 分钟的 DEBUG 日志,并在出现异常时保存它。 (主日志文件始终处于 INFO 级别) 例如,当发生 HttpRequestException 时,我们在特定文件夹

中保存了一个包含 1 分钟 DEBUG 日志的文件 HttpRequestException-10-02-2015-10:28:50.log

所以我们可以很容易地看到这个文件夹中的所有异常

/Exceptions/
   - HttpRequestException-10-02-2015-10:28:50.log
   - NullPointerException-10-02-2015-10:29:51.log
   - IOException-10-02-2015-11:29:51.log

所以...可以使用 slf4j 这样的工具来完成吗? DEBUG 在生产服务器上记录一个巨大的性能问题吗?

谢谢

我找到了解决办法。 我使用 cyclicBufferTracker 告诉 appender 在触发后使用最后的 x 行 我可以使用 evaluator 属性来配置触发器(默认触发器是在发生错误时)

电子邮件对我来说没问题,但如果有人想把它放在文件而不是电子邮件中,我认为你可以创建一个自定义 Appender 而不是 SMTPAppender

在本页点赞:http://jira.qos.ch/browse/LOGBACK-207

这是实际代码:(如果您使用电子邮件实现,您将需要 javax.activation 和 javax.mail),如果您像我一样使用 gmail,则需要在 gmail 设置中允许低安全性应用: Gmail less secure apps

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
   <smtpHost>smtp.gmail.com</smtpHost>
   <smtpPort>587</smtpPort>
   <asynchronousSending>false</asynchronousSending>
   <STARTTLS>true</STARTTLS>
   <username>GoogleUsername</username>
   <password>mypassword</password>
   <to>GoogleUsername@gmail.com</to>
   <from>GoogleUsername@gmail.com</from>
   <subject>Exception Alert</subject>
   <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%date - %message%n</pattern>
   </layout>
   <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
      <bufferSize>50</bufferSize>
   </cyclicBufferTracker>
</appender>

希望对您有所帮助