logback错误日志发送邮件

logback

一、介绍

logback是由log4j的作者开发的一个开源日志组件,用以替代log4j。

logback由3个部分组成:

♦ logback-core (基础模块)

♦ logback-classic (log4j改进版,实现slf4j)

♦ logback-access (与servlet交互的模块,提供通过Http来访问日志的功能)

二、logback对比log4j

1. 性能

logback重写内核,性能提升,内存加载小。

2. 充分测试

以年为单位的测试时间。

3. logback-classic原生实现slf4j

log4j还需要一个中间转换层。

4. 文档内容丰富

官网200pages+。

5.  XML配置文件热加载

logback-classic能自动重新加载配置文件。

6. 从I/O错误中优雅恢复

RollingFileAppender能够非常友好地从I/O异常中恢复。

7. 自动删除日志归档

可以控制日志文件的最大数量或超时删除时间。

8. 自动压缩日至归档

自动压缩已经打出来的日志文件,压缩过程应用不受影响。

9. 配置文件适应不同环境

加入条件判断,区分开发,测试,生产。

10. SiftingAppender

可筛选Appender。

11. 异常栈信息带有包信息

打堆栈树日志时,有包的信息。

三、logback依赖jar

♦ slf4j-api

♦ logback-core

♦ logback-classic

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.9</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.0.13</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.3</version>
</dependency>

 logback-mail

一、发送邮件依赖jar

♦ mail

♦ janino

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.4</version>
</dependency>
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>2.7.8</version>
</dependency>

二、配置logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 控制台输出 -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
<!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
--> <pattern>%date{MM:dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 输出DEBUG级别日志文件的appender --> <appender name="RollingFileRun" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <File>/data/tomcat/runtime/debug.log</File> <!-- 按每小时滚动文件,如果一个小时内达到100M也会滚动文件, 滚动文件将会压缩成zip格式, 最多保留672个滚动文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/runtime/debug-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
<!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 输出ERROR级别日志文件的appender --> <appender name="RollingFileError" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>/data/tomcat/error/error.log</File> <!-- 按每小时滚动文件,如果一个小时内达到100M也会滚动文件, 滚动文件将会压缩成zip格式, 最多保留672个滚动文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/data/tomcat/error/error-%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>672</maxHistory> </rollingPolicy> <encoder> <!-- 格式化输出:%date(d%)表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度, -->
<!-- %logger{36}表示logger名字最长36个字符,否则按照句点分割,%msg:日志消息,%n是换行符
--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- SMTP server的地址,必需指定。如网易126的SMTP服务器地址是: smtp.126.com --> <property name="smtpHost" value="smtp.126.com"/> <!-- SMTP server的端口地址。默认值:25 --> <property name="smtpPort" value="25"/> <!-- 发送邮件账号 --> <property name="username" value="********@126.com"/> <!-- 发送邮件密码(此密码为网易126邮箱的客户端授权密码,不是邮箱登录密码,126邮箱需要开启POP3/SMTP服务、IMAP/SMTP服务才可使用) --> <property name="password" value="********"/> <!-- 如果设置为true,appender将会使用SSL连接到日志服务器。默认值:false --> <property name="SSL" value="false"/> <!-- 指定发送到那个邮箱,可设置多个<to>属性,指定多个目的邮箱,收件人账号多个可以逗号隔开 --> <property name="email_to" value="********@126.com"/> <!-- 指定发件人名称。 --> <property name="email_from" value="********@126.com" /> <!-- 指定emial的标题,它需要满足PatternLayout中的格式要求。如果设置成“Log: %logger - %msg”,就案例来讲,则发送邮件时, -->
<!-- 标题为“【Error】: com.****.****Task - null.equals”。
--> <property name="email_subject" value="【Error】: %logger - %msg" /> <!-- 邮件发送的appender --> <appender name="Email" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>${smtpHost}</smtpHost> <smtpPort>${smtpPort}</smtpPort> <username>${username}</username> <password>${password}</password> <asynchronousSending>false</asynchronousSending> <SSL>${SSL}</SSL> <to>${email_to}</to> <from>${email_from}</from> <subject>${email_subject}</subject> <!-- html格式 --> <layout class="ch.qos.logback.classic.html.HTMLLayout"> <Pattern>%date%level%thread%logger{0}%line%message</Pattern> </layout> <!-- 这里采用等级过滤器,指定等级相符才发送,这里指定ERROR级别才发送 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 每个电子邮件只发送一个日志条目 --> <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> <bufferSize>1</bufferSize> </cyclicBufferTracker> </appender> <!-- 日志输出,设置级别,指定appender --> <root level="DEBUG"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileRun"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="Email"/> </root> </configuration>

三、设置网易126邮箱

四、使用

logger.error("null.equals");

五、邮件截图

原文地址:https://www.cnblogs.com/lsysy/p/9935551.html