有关于使用log4j2发送普通邮件和ssl邮件

1 篇文章 0 订阅

使用log4j2日志框架发送邮件

近几日,我一直在尝试通过log4j2的StmpAppender来实现发送服务器错误日志的功能,以下是我在网上搜寻到的普通邮件的发送配置

maven

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.1</version>
        </dependency>
        <!--log4j的邮件发送依赖-->
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>

用于普通邮件的log4j2配置,前提是首先需要一个开启了stmp/imap服务的邮箱账号,开通方式自行百度即可,这里不做介绍

<Configuration name="Log4jConfiguration" status="trace"
               strict="true" schema="Log4J-V2.0.xsd">

    <Appenders>
        <!-- 控制台打印日志 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%c %m %n"/>
        </Console>
        <SMTP name="Mail" subject="logTest" to="*******@*******" from="********@********"
              smtpProtocol="smtp" smtpHost="mail.qq.com" smtpPort="25"
              bufferSize="1024" smtpDebug="false" smtpPassword="*******"
              smtpUsername="****@z******">
            <!--日志过滤,只发送ERROR邮件-->
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </SMTP>
    </Appenders>

    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Mail"/>
        </Root>
    </Loggers>
</Configuration>
参数说明
nameappender的名称
subject主题
to邮件的接收方邮箱,多个账户使用“,”分割
from邮件发送所使用的账户
smtpProtocolstmp协议
smtpHost邮件发送服务器域名
smtpPort邮件发送服务器端口
smtpPassword账户密码
smtpUsername账户名称

最终得到的邮件是这样的

@Log4j2
public class LogTest {
    public static void main(String[] args) {
        log.error("Hello World");
    }
}

在这里插入图片描述

ssl加密邮件

让我无奈的是,公司所使用的邮箱只能是ssl的加密邮件,以上普通的邮件是不能在我公司的邮件服务器上使用,而使用QQ和网易的邮箱发送日志邮件会存在单日发送的邮件数量上限的问题,所以我一直在寻找log4j2的ssl邮件配置方式。

但不幸的就是,百度+google也没能找到相关的log4j2配置

实在没有办法就在google搜索“log4j2 send ssl email”(我初中英语就不及格,我自豪),希望能够搜到相关的老外的帖子,用chrome浏览器自带的翻译功能勉强看看。

这是我发现的一篇老外的帖子:https://stackoverflow.com/questions/50194418/log4j2-gmail-smtp-appender

可能需要科学上网才能打开网址, 我记直接展示截图了
在这里插入图片描述
帖子大概的意思是:“ 我找不到以下参数:mail.smtp.ssl.enable和mail.smtp.starttls.enable。 ”

根据帖子评论区的讨论,mail.smtp.ssl.enable和mail.smtp.starttls.enable是log4j.properties的配置ssl邮件配置参数,但是楼主试图将这两个参数用于log4j2.xml当中,导致了找不到参数异常的出现。

借助这个老外的思路,我的思路是,既然log4j这个老古董都支持ssl邮件,那么log4j2这个更强的,没理由不支持才对。

这个老外的问题,是不是只是属性名字不对而已?

对照STMP标签的其他属性名: “stmpHost”、“stmpPort”、“stmpUsername”。。。我似乎明白了什么!

于是,尝试如下配置,以网易企业邮箱为例

<Configuration name="Log4jConfiguration" status="trace"
               strict="true" schema="Log4J-V2.0.xsd">

    <Appenders>
        <!-- 控制台打印日志 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%c %m %n"/>
        </Console>
        <SMTP name="Mail" subject="logTest" to="******@******" from="*******@********"
        	<!--stmp为普通邮件stmps为加密邮件-->
              smtpProtocol="smtps" smtpHost="smtphz.qiye.163.com" smtpPort="465"
              bufferSize="1024" smtpDebug="false" smtpPassword="********"
              smtpUsername="*****@******"
              <!--开启ssl加密-->
              smtpSsl="true" smtpStarttls="true">
            <!--日志过滤-->
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </SMTP>
    </Appenders>

    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="Mail"/>
        </Root>
    </Loggers>
</Configuration>
测试结果

在这里插入图片描述

如此聪明绝顶的人,没错!就是我!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值