欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件

发布时间:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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 程序日志

总结

以上是生活随笔为你收集整理的log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。