SpringBoot 配置Slf4J自動發(fā)送ERROR級別日志到郵箱

最近在學習微服務(wù)框架Spring Cloud,把自己小項目中的郵件相關(guān)模塊拆分出來單獨構(gòu)建了一個通知中心微服務(wù),以后發(fā)送郵件,擴展短信通知等就可以在這個微服務(wù)中單獨擴展了。

本來想著把系統(tǒng)異常也作為消息發(fā)送給通知中心微服務(wù),但是感覺代碼會很繁瑣,雖然SpringBoot有統(tǒng)一異常管理方式,但也并不是真的所有異常都能通過這種方式處理。

然后發(fā)現(xiàn)slf4j可以通過配置xml配置增加appender來將ERROR級別的日志發(fā)送給指定的郵箱。

如下是完整的配置

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>

    <property name="log.path" value="${LOG_PATH:-.}"/>
    <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="ApplicationName"/>
    <springProperty scope="context" name="applicationStack" source="application.stack" defaultValue="beta"/>
    <springProperty scope="context" name="smtpHost" source="spring.mail.host"/>
    <springProperty scope="context" name="smtpPort" source="spring.mail.port"/>
    <springProperty scope="context" name="mailFrom" source="spring.mail.username"/>
    <springProperty scope="context" name="username" source="spring.mail.username"/>
    <springProperty scope="context" name="mailTo" source="tendency.system.emails"/>
    <springProperty scope="context" name="password" source="spring.mail.password"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder默認配置為PartternLayoutEncoder -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
                %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="logfile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/server.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/server_%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}
                - %msg%n</pattern> -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="transaction_file"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/transaction.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/transaction_%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}
                - %msg%n</pattern> -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level - %msg%n</pattern>
        </encoder>
    </appender>

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


    <logger name="com.eee" level="INFO" additivity="false">
        <appender-ref ref="transaction_file" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="MAIL"/>
    </logger>
    <logger name="com.eee" level="DEBUG" additivity="false">
        <appender-ref ref="logfile" />
        <appender-ref ref="transaction_file" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="MAIL"/>
    </logger>
    <root level="ERROR">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="logfile" />
        <appender-ref ref="MAIL"/>
    </root>

    <logger name="org.mybatis" level="INFO" additivity="true">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="logfile"/>
        <appender-ref ref="MAIL"/>
    </logger>

</configuration>

主要涉及到的配置如下。通過springProperty來引用application.properties中配置的郵箱配置。

<springProperty scope="context" name="appName" source="spring.application.name" defaultValue="ApplicationName"/>
<springProperty scope="context" name="applicationStack" source="application.stack" defaultValue="beta"/>
<springProperty scope="context" name="smtpHost" source="spring.mail.host"/>
<springProperty scope="context" name="smtpPort" source="spring.mail.port"/>
<springProperty scope="context" name="mailFrom" source="spring.mail.username"/>
<springProperty scope="context" name="username" source="spring.mail.username"/>
<springProperty scope="context" name="mailTo" source="tendency.system.emails"/>
<springProperty scope="context" name="password" source="spring.mail.password"/>


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

如下圖是收到郵件的效果圖,還不錯吧,哈哈,都給格式化好了

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,160評論 0 6
  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,225評論 1 13
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,316評論 0 15
  • Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級別、存放器和布局的,它可接key...
    Alex_1799閱讀 45,533評論 0 11
  • 2018年12月25日體重如下: 早睡早起:早上5:10起床,跑步5公里 早餐:10個水餃、一根玉米加餐:一個雞蛋...
    守候簡單的幸福閱讀 356評論 0 3

友情鏈接更多精彩內(nèi)容