log4j 程序日志
在今天的帖子中,我将向您展示如何将日志语句过滤为警告电子邮件。 这是出于监视我正在处理的一个应用程序的一些关键点的需要。 您可以使用一些工具来执行应用程序监视。 我不会详细介绍这些工具,但有时让应用程序发送警告电子邮件会更容易。
我主要将log4j用于记录需求。 不幸的是,由于Java生态系统中有许多日志记录框架,因此本文仅涵盖其中的一部分。 将来我可能会为其他人做些事情,但是我想强调一下AntónioGonçalves关于记录日志API标准化的旧文章: 我需要您作为Logging API Spec Lead! 。 这里介绍的示例是针对log4j的 ,但是github项目还包含一个log4j2示例。
用例
为了提供更多细节,我希望在应用程序生成错误时得到通知,但也忽略应用程序本身已经处理的错误。 对于一个更具体的示例,我遇到一种情况,其中数据库插入会生成约束违例异常,但是此错误由应用程序专门处理。 即使这样,JDBC驱动程序也会记录该异常。 对于这种情况,我不希望收到通知。
设置SMTPAppender
无论如何,查看log4j ,您可以创建一个将所有日志发送到电子邮件的附加程序,只需选中SMTPAppender即可 。 看起来像这样:
log4j-SMTPAppender
<appender name="SMTP" class="org.apache.log4j.net.SMTPAppender"><errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/><param name="Threshold" value="ERROR"/><param name="To" value="someone@somemail.com"/><param name="From" value="someonelse@somemail.com"/><param name="Subject" value="Log Errors"/><param name="SMTPHost" value="smtp.somemail.com"/><param name="SMTPUsername" value="username"/><param name="SMTPPassword" value="password"/><param name="BufferSize" value="1"/><param name="SMTPDebug" value="true"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n"/></layout>
</appender>
筛选
我们的过滤需求在标准log4j库中不可用。 您需要使用log4j-extras ,它为您提供了支持过滤复杂表达式的ExpressionFilter 。 我们还使用常规log4j库中的StringMatchFilter 。
现在,我们可以向SMTPAppender添加一个triggeringPolicy
:
log4j-triggeringPolicy
<triggeringPolicy class="org.apache.log4j.rolling.FilterBasedTriggeringPolicy"><filter class="org.apache.log4j.varia.StringMatchFilter"><param name="StringToMatch" value="ERROR01"/><param name="AcceptOnMatch" value="false"/></filter><filter class="org.apache.log4j.filter.ExpressionFilter"><param name="expression"value="CLASS LIKE .*Log4jExpressionFilter.*"/><param name="acceptOnMatch" value="false"/></filter><filter class="org.apache.log4j.filter.LevelRangeFilter"><param name="levelMin" value="ERROR"/><param name="levelMax" value="FATAL"/></filter>
</triggeringPolicy>
此配置将过滤日志以电子邮件只有ERROR
和FATAL
阈值中的类不登录与Log4jExpressionFilter
在它的名字,并没有ERROR01
的日志信息。
看一下LoggingEventFieldResolver ,看看可以与ExpressionFilter一起使用的其他表达式 。 您可以使用EXCEPTION,METHOD和其他一些非常有用的工具。
测试中
如果您依赖真实的服务器,则测试SMTPAppender并不容易。 幸运的是,您可以使用模拟javamail ,甚至不必担心会污染SMTP服务器。 这也包含在github项目中。
资源资源
您可以从我的github存储库中克隆log4j和log4j2的完整工作副本。
Log4j邮件过滤器
由于我将来可能会修改代码,因此您可以从1.0版中下载本文的原始源。 或者,克隆存储库,并使用以下命令从发行版1.0中检出标记: git checkout 1.0
。
翻译自: https://www.javacodegeeks.com/2014/08/monitoring-and-filtering-application-log-to-mail-with-log4j.html
log4j 程序日志