logback日志详细解析
1、为什么使用logback
- 内核重写、测试充分、初始化内存加载更小,这一切让logback性能和log4j相比有诸多倍的提升
- logback非常自然地直接实现了slf4j,方便理解
- 支持自动去除旧的日志文件,可以控制已经产生日志文件的最大数量
- 官方自动配置了许多的appender,方便使用
2、springboot中为什么使用logback-spring.xml来代替logback.xml
logback.xml的加载早于application.properties,所以如果在logback.xml中使用了变量,而恰好这个变量是写在application.properties时,那么就会获取不到,只要改成logback-spring.xml就可以解决。
3、属性
(1)configuration
configuration是logback的父节点,它只有三个属性:
- scan
自动加载判断,当配置文件发生改变时,将会被重新加载。默认为true
- scanPeriod
检测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认为毫秒,当scan=true时这个值生效,默认时间间隔为1分钟
- debug
当被设置为true时,将打印出logback内部日志信息,实时查看logback运行信息,默认为false
(2)logger
<logger>用来设置某一个包或者某一个具体类的日志打印级别以及方式。在logger内可以包含零个或者多个appender-ref,然后对应的appender将会被添加到这个logger。它的属性有:
- name
指定对应的包路径或者类路径。
- level
用来设置日志打印的级别,五个常用打印级别从低至高依次为TRACE、DEBUG、INFO、WARN、ERROR,如果未设置此级别,那么当前logger会继承上级的级别
- additivity
是否向上级log传递打印信息,默认为true
(3)root
<root>也是logger元素,但它是根logger,所有logger的最上级,只有一个level属性,它的name固定为ROOT
(4)appender
<appender>是configuration的子节点,它的作用是定义日志输出的方式。它有2个必要的属性:
- name:指定当前appender的名称
- class:指定appender对应的类,控制日志输出方式
(5)encoder
encoder主要负责的是将日志信息转换成字节数组以及将字节数组写到输出流中去。encoder
| 转换符 | 作用 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| c {length } lo {length } logger {length } |
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
|
||||||||||||||||||||||||
| C {length } class {length } |
输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
| contextName cn |
输出上下文名称。 | ||||||||||||||||||||||||
| d {pattern } date {pattern } |
输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
|
||||||||||||||||||||||||
| F / file | 输出执行记录请求的java源文件名。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
| caller{depth}caller{depth, evaluator-1, ... evaluator-n} | 输出生成日志的调用者的位置信息,整数选项表示输出信息深度。
例如, %caller{2} 输出为: 0 [main] DEBUG - logging statement 例如, %caller{3} 输出为: 16 [main] DEBUG - logging statement |
||||||||||||||||||||||||
| L / line | 输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
| m / msg / message |
输出应用程序提供的信息。 |
||||||||||||||||||||||||
| M / method | 输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
| n | 输出平台先关的分行符“\n”或者“\r\n”。 | ||||||||||||||||||||||||
| p / le / level | 输出日志级别。 | ||||||||||||||||||||||||
| r / relative | 输出从程序启动到创建日志记录的时间,单位是毫秒 | ||||||||||||||||||||||||
| t / thread | 输出产生日志的线程名。 | ||||||||||||||||||||||||
| replace(p ){r, t} |
p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。 例如, "%replace(%msg){‘\s‘, ‘‘}" |
(6)filter
<filter>是appender的子节点,表示对当前给定的日志级别再进行一次过滤。配置方式:
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
4、常用Appender说明
(1)ConsoleAppender
作用是将日志输出到控制台。配置方式为:
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{} - %msg%n</pattern>
</encoder>
</appender>
(2)FileAppender
作用是将日志写入到文件中去。配置方式:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>存储路径</file>
<!-- true表示添加到文件结尾,false表示清空文件 -->
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{} - %msg%n</pattern>
</encoder>
</appender>
(3)RollingFileAppender
作用是滚动记录文件,先将文件记录到指定文件,当符合某个条件时,再将文件记录到其他的文件中去。配置方式:
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/error/spring-error-%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory></MaxHistory>
</rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{} - %msg%n</pattern>
</encoder> <!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
(4)异步写日志
通常日志会记录到文件中去,此时写一次就会造成一次磁盘IO,而采取异步写日志方式后,不让此次写日志阻塞线程,造成不必要的性能损耗。配置方式:
<!-- 异步输出 -->
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
<discardingThreshold></discardingThreshold>
<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
<queueSize></queueSize>
<!-- 添加附加的appender,最多只能添加一个 -->
<appender-ref ref ="ERROR"/>
</appender>
logback日志详细解析的更多相关文章
- springboot2.0整合logback日志(详细)
<div class="post"> <h1 class="postTitle"> springboot2.0整合logback日志(详 ...
- mysql日志详细解析
MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是说用来记录mysql ...
- mysql日志详细解析 [转]
原文出处:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql ...
- mysql日志详细解析【转载】
转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...
- [转]mysql日志详细解析
转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...
- SpringBoot整合Logback日志框架配置全解析
目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- 【使用篇二】SpringBoot的日志体系及如何开启logback日志(15)
抄自:https://blog.csdn.net/liujun03/article/details/82684209 Java应用中,日志一般分为以下5个级别(从高到低): ERROR 错误信息 WA ...
- Logback日志系统配置攻略
logback是log4j作者推出的新日志系统,原生支持slf4j通用日志api,允许平滑切换日志系统,并且对简化应用部署中日志处理的工作做了有益的封装. 官方地址为:http://logback.q ...
随机推荐
- UML部署图介绍
https://www.w3cschool.cn/uml_tutorial/uml_tutorial-mi5w28ur.html
- Flutter中的事件广播event_bus的基本使用
官方包参考地址: https://pub.dev/packages/event_bus https://github.com/marcojakob/dart-event-bus 1.pubspec.y ...
- spring bean容器加载后执行初始化处理@PostConstruct
先说业务场景,我在系统启动后想要维护一个List常驻内存,因为我可能经常需要查询它,但它很少更新,而且数据量不大,明显符合缓存的特质,但我又不像引入第三方缓存.现在的问题是,该List的内容是从数据库 ...
- 各种修改Mysql字符集
以下方法最好在没有数据时操作,否则有可能导致乱码.如果已有数据,做好备份尝试Mysql迁移由于字符集导致乱码的数据 创建测试环境 mysql> create database test_db; ...
- 123457123457#0#-----com.cym.shuXueWangGuo1--前拼后广--儿童数学
123456123456#1#-----com.cym.shuXueWangGuo1--前拼后广--儿童数学
- iOS 点击空白处收回键盘的几个简单代码
//收回键盘1 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view.subviews enumer ...
- CSS3 @font-face详细用法
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体就不用再为只能使用Web安全字体烦恼了!肯定 ...
- Azure DevOps 利用rest api设置variable group
我们在Azure DevOps中设置参数的时候,可以使用build,release各自的variables,但是各自的变量不能共用.此时我们需要使用variable group,它允许跨Build和R ...
- 单点登录系统(SSO)详细设计说明书(上篇)
1.引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书. 同时,说明书也发挥与策划和设计人员更好地沟通的作用. 1.2 ...
- SMOS数据产品介绍与下载方法
1. SMOS数据介绍 The Soil Moisture and Ocean Salinity (SMOS) 卫星是欧空局发射的一颗以探测地球土壤水含量以及海表盐度为目标的卫星,卫星所搭载的唯一载荷 ...