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要有了解,避免冲突引起别的问题

好的,关于 logback 使用遇到问题解决问题记录,我会尽力回答你的问题。 首先,你需要了解 logback 是一个开源的 Java 日志框架,它是由 log4j 作者 Ceki Gülcü 所开发的。logback 具有高效、灵活、可扩展等特点,是目前 Java 开发中广泛应用的日志框架之一。 接下来,我会回答你可能遇到的一些问题,并提供相应的解决方案。 1. logback 配置文件无法加载或者加载不正确怎么办? 这可能是因为配置文件的路径设置不正确导致的。你可以检查一下配置文件的路径是否正确,或者将配置文件放在 classpath 下,这样可以保证 logback 能够正确加载配置文件。 2. 如何设置日志输出的级别? logback 支持多种级别的日志输出,包括 TRACE、DEBUG、INFO、WARN、ERROR 等。你可以在配置文件中设置 rootLogger 的 level 属性来控制日志的输出级别,例如: ``` <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> ``` 这里将日志输出级别设置为 INFO。 3. 如何将日志输出到文件中? logback 提供了多种输出方式,其中包括将日志输出到文件中。你可以在配置文件中添加一个 fileAppender,然后将日志输出到指定的文件中,例如: ``` <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/app.log</file> <append>true</append> <encoder> <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE" /> </root> ``` 这里将日志输出到文件 logs/app.log 中。 4. 如何使用 logback 进行异步日志输出? logback 支持异步日志输出,可以提高日志输出的性能。你可以在配置文件中添加一个 asyncAppender,然后将日志输出到 asyncAppender 中,例如: ``` <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>512</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="FILE" /> </appender> <root level="INFO"> <appender-ref ref="ASYNC" /> </root> ``` 这里将日志输出到 asyncAppender 中,使用异步方式输出。 以上是 logback 使用中常见的问题解决方案,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值