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");

五、邮件截图

logback错误日志发送邮件的更多相关文章

  1. springboot中用来进行查看错误日志的logback文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- 从高到地低 OFF . FATAL . ERROR . ...

  2. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  3. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  4. Spring Boot Logback应用日志

    e Spring Boot Logback应用日志 2015-09-08 19:57 7673人阅读 评论(0) 收藏 举报 . 分类: Spring Boot(51) . 目录(?)[+] 日志对于 ...

  5. SpringBoot+logback实现日志打印

    logback介绍 logback是一款开源的日志框架,内核重写了,是基于log4j基础进行改良的.其官网为logback.qos.ch.logback在性能上有很大提升,拥有更多特性. logbac ...

  6. SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  7. SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。

    小结: 1.加层: 每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性. 为了解决这个问题,就是在日志框架和应用程序之间架设一个 ...

  8. logback配置日志输出

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...

  9. Sentry错误日志监控你会用了吗?

    无论作为新手还是老手程序员在程序的开发过程中,代码运行时难免会抛出异常,而且项目在部署到测试.生产环境后,我们便不可能像在开发时那样容易的及时发现处理错误了.一般我们都是在错误发生一段时间后,错误信息 ...

随机推荐

  1. 洛咕 P3321 [SDOI2015]序列统计

    显然dp就是设\(f[i][j]\)表示dp了i轮,对m取膜是j的方案数 \(f[i][xy\mod m]=f[i-1][x]\times f[i-1][y]\) 这是\(O(nm^2)\)的 像我这 ...

  2. SSISDB3:Package的执行实例

    SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...

  3. 菜鸟vimer成长记——第1章、统一概念

    不管学什么技术,我都深信概念是最重要的.是影响整个学习轨迹,决定能在这个技术领域高度. 当然如果你现在的目的不是在学习而在于解决问题(很多人不愿意承认,或者没发现),那概念就暂时没那么重要了. 目的 ...

  4. BootStap学习笔记(1)

    移动设备优先:  为了让开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的head之中添加viewport meat标签:如下: <metaname="viewport& ...

  5. javaweb学习3——验证码

    声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转 本文链接:https://www.cnblogs.com/xdp- ...

  6. Jmeter+Badboy安装使用文档

                  Jmeter+Badboy安装使用文档       目录   1.jmeter安装    1 2.Jmeter基础使用    3 3. 使用Jmeter进行分布式测试    ...

  7. NO--13微信小程序,左右联动

    写在前面: 从2016年张小龙发布微信小程序这种新的形态,到2017年小程序的不温不火,再到今年小程序的大爆发,从一度刷爆朋友圈的‘头脑王者’,再到春节聚会坐在一起的火爆小游戏“跳一跳",都 ...

  8. 基于Vue的简单通用分页组件

    分页组件是每一个系统里必不可少的一个组件,分页组件分为两部分.第一部分是模版部分,用于显示当前分页组件的状态,例如正在获取数据.没有数据.没有下一页等等:第二部分是分页数据对象,用于封装一个分页组件的 ...

  9. 006 --MySQL索引原理

    一 .索引的概念? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化 ...

  10. python3实现合并两个有序数组

    很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始.今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲 ...