美文网首页
SpringBoot 配置Slf4J自动发送ERROR级别日志到

SpringBoot 配置Slf4J自动发送ERROR级别日志到

作者: 鹅鹅鹅_ | 来源:发表于2019-06-09 15:13 被阅读0次

最近在学习微服务框架Spring Cloud,把自己小项目中的邮件相关模块拆分出来单独构建了一个通知中心微服务,以后发送邮件,扩展短信通知等就可以在这个微服务中单独扩展了。

本来想着把系统异常也作为消息发送给通知中心微服务,但是感觉代码会很繁琐,虽然SpringBoot有统一异常管理方式,但也并不是真的所有异常都能通过这种方式处理。

然后发现slf4j可以通过配置xml配置增加appender来将ERROR级别的日志发送给指定的邮箱。

如下是完整的配置

<?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

相关文章

  • SpringBoot 配置Slf4J自动发送ERROR级别日志到

    最近在学习微服务框架Spring Cloud,把自己小项目中的邮件相关模块拆分出来单独构建了一个通知中心微服务,以...

  • 日志

    日志级别 NOTEST < DEBUG < INFO < ERROR < FATAL 日志配置 日志配置官方示例。...

  • Logger级别定义

    使用Slf4j或者诸多日志框架时,可以看到不少日志级别,我们常用INFO和ERROR,对其他级别没有过多的使用,但...

  • 三、Spring Boot与日志

    一、日志框架分类和选择 二、SLF4j的使用 三、SpringBoot日志关系 四、SpringBoot日志使用 ...

  • spring boot学习与实践练习2

    SpringBoot和日志 SpringBoot选用的日志框架是日志抽象层(门面)选用SLF4J,日志实现选用是l...

  • 4.springboot 与日志

    学习记录,仅供参考 异步输出 自动归档 日志级别: 所有支持的日志系统可以在springboot设置的记录器级别E...

  • log4j,log4j2,logback日志框架的使用

    SpringBoot环境下使用 目标:以debug,info,error三个日志级别为例,控制台能打印这三个日志级...

  • 内建模块--logging

    日志模块 级别:默认为warning级别。(高到低:critical、error、warning、info、deb...

  • Spring Boot 默认日志配置

    springboot 默认日志配置 SpringBoot 日志配置 默认采用LogBack作为日志输出! 日志格式...

  • logback日志配置

    实现了门面日志@slf4j,其配置大同小异,logback、log4j2基本差不太多,以下看springboot默...

网友评论

      本文标题:SpringBoot 配置Slf4J自动发送ERROR级别日志到

      本文链接:https://www.haomeiwen.com/subject/clhnxctx.html