使用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>

此配置将过滤日志以电子邮件只有ERRORFATAL阈值中的类不登录与Log4jExpressionFilter在它的名字,并没有ERROR01的日志信息。

查看LoggingEventFieldResolver ,看看可以与ExpressionFilter一起使用的其他表达式 。 您可以使用EXCEPTION,METHOD和其他一些非常有用的工具。

测试中

如果您依赖真实的服务器,则测试SMTPAppender并不容易。 幸运的是,您可以使用模拟javamail ,甚至不必担心会污染SMTP服务器。 这也包含在github项目中。

资源资源

您可以从我的github存储库中为log4jlog4j2克隆完整的工作副本。

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

apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-1.2.11.jar, log4j-1.2.12.jar, log4j-1.2.13-sources.jar, log4j-1.2.13.jar, log4j-1.2.13.src.jar, log4j-1.2.14-sources.jar, log4j-1.2.14.jar, log4j-1.2.15-sources.jar, log4j-1.2.15.jar, log4j-1.2.16-sources.jar, log4j-1.2.16.jar, log4j-1.2.5.jar, log4j-1.2.6.jar, log4j-1.2.7.jar, log4j-1.2.8.jar, log4j-1.2.9.jar, log4j-1.2.91.jar, log4j-1.2.jar, log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-bridge-0.9.4-sources.jar, log4j-bridge-0.9.4-tests.jar, log4j-bridge-0.9.4.jar, log4j-bridge-0.9.6-sources.jar, log4j-bridge-0.9.6-tests.jar, log4j-bridge-0.9.6.jar, log4j-bridge-0.9.jar, log4j-config.jar, log4j-core-2.0.2-javadoc.jar, log4j-core-2.0.2-sources.jar, log4j-core-2.0.2-tests.jar, log4j-core-2.0.2.jar, log4j-core.jar, log4j-ext.jar, log4j-flume-ng-2.0.2-javadoc.jar, log4j-flume-ng-2.0.2-sources.jar, log4j-flume-ng-2.0.2.jar, log4j-java1.1.jar, log4j-jcl-2.0.2-javadoc.jar, log4j-jcl-2.0.2-sources.jar, log4j-jcl-2.0.2.jar, log4j-jmx-gui-2.0.2-javadoc.jar, log4j-jmx-gui-2.0.2-sources.jar, log4j-jmx-gui-2.0.2.jar, log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, log4j-over-slf4j-1.5.6-sources.jar, log4j-over-slf4j-1.5.6.jar, log4j-over-slf4j-1.5.8-sources.jar, log4j-over-slf4j-1.5.8.jar, log4j-over-slf4j-1.6.1.jar, log4j-slf4j-impl-2.0.2-javadoc.jar, log4j-slf4j-impl-2.0.2-sources.jar, log4j-slf4j-impl-2.0.2.jar, log4j-snmp-appender.jar, log4j-taglib-2.0.2-javadoc.jar, log4j-taglib-2.0.2-sources.jar, log4j-taglib-2.0.2.jar, log4j-to-slf4j-2.0.2-javadoc.jar, log4j-to-slf4j-2.0.2-sources.jar, log4j-to-slf4j-2.0.2.jar, log4j-web-2.0.2-javadoc.jar, log4j-web-2.0.2-sources.jar, log4j-web-2.0.2.jar, log4j-wjw.jar, log4j-xml-1.3alpha-7.jar, log4j.jar, org.apache.log4j_1.2.15.v201005080500.jar, org.apache.log4j_1.2.15.v201012070815.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值