logback异常后发送邮件内容格式错误问题解决



项目场景:

项目场景:客户运营管理平台,异常后需要进行邮件通知到开发人员




问题描述:

使用了logback的异常发送邮件功能,但是发送出来的邮件内容都是html代码

<appender name="MAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>${smtpHost}</smtpHost>
        <smtpPort>${smtpPort}</smtpPort>
        <username>${username}</username>
        <password>${password}</password>
        <SSL>${SSL}</SSL>
        <asynchronousSending>true</asynchronousSending>
        <to>${mailTo}</to>
        <from>${mailFrom}</from>
        <subject>${environment}-[${HOSTNAME}]-${mailSubject}</subject>
        <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <!-- 异步输出 -->
    <appender name ="MAIL_ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold >0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>50</queueSize>
        <!-- Copy caller data to event 解决 日志输出使用 AsyncAppender 时,输出的文件行号信息是 ?:? -->
        <includeCallerData>true</includeCallerData >
        <!-- 添加附加的appender,最多只能添加一个 -->
        <appender-ref ref="MAIL"/>
    </appender>

下面是邮件发出来的内容,跟logbak官方提供的不一样,可读性很差,这肯定是不便于开发人员去定位问题的




原因分析:

因为多个项目都使用了相同的异常邮件通知方案,A项目可以正常发送,B项目发出来的就是html代码。考虑下以下几种可能引起的情况,1. jar冲突 2. 邮箱服务器进行了过滤(既然A项目可以那说明不是这个问题导致的),于是去看QQ邮箱发出来的正常邮箱和html代码的显示原文邮件,发现邮件的Content-Type不一样

Content-Type: text/plain; charset=UTF-8

这显然就导致邮件内容当普通文本显示了




解决方案:

启动2个项目,手动throw出来异常进行异常日志打印,进行断点调试,  去查看设置邮件 Content-Type的代码,发现了问题,A项目去构造Content-Type的时候,调用的底层方法为axiom-api.jar下的类,而且这个类的Content-Type写死了

正常的jar应该是下面的引用

于是把 axiom-api的jar引用直接删除,再发送异常邮件就显示正常了

事后思考:1. 遇到问题应该先使用排除法, 排除掉不可能的情况 2. 要学会使用查看第三方源代码的方法,去debug进行跟踪调试 3. 项目中引入的jar要有了解,避免冲突引起别的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值