JAVA中的DEBUG日志轮换

时间:2015-02-10 09:36:32

标签: java debugging logging rotation slf4j

在生产环境中(例如)我们经常使用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是否在生产服务器上记录了一个巨大的性能问题?

由于

1 个答案:

答案 0 :(得分:0)

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

电子邮件对我来说没问题,但如果有人想把它放在文件而不是电子邮件中,我想你可以创建一个自定义的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>

希望它会有所帮助