Logback
官网地址——http://logback.qos.ch/
Logback介绍
logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。
Logback模块介绍
- logback-core——其他两个模块的基础
- logback-classis——它是log4j的一个改良版本,同时它完整实现了slf4j API
- logback-access——访问模块与Servlet容器集成提供通过HTTP来访问日志的功能
依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
Logback的组件
1.Logger
- 日志的记录器
- 把他关联到应用对应的context上
- 主要用于存放日志对象
- 可以自定义日志类型级别
2.Appender
- 用于指定日志输出的目的地
- 目的地可以是控制台,文件,数据库等
3.Layout
- 负责把事件转换成字符串
- 格式化的日志信息的输出
- 在logback中Layout对象被封装在encoder中
Logback配置
配置文件读取顺序
- logback.groovy
- logback-test.xml
- logback.xml
- 如果都不存在使用默认的
占位符含义
- %level——日志级别
- %d{yyyy-MM-dd HH:mm:ss.SSS}——日期
- %c——类的完整名称
- %M——方法
- %L——行号
- %thread——线程名称
- %m或%msg——信息
- %n——换行
logback.xml详解
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--这个配置文件演示了控制台appender -->
<!--自定义变量方便其他标签引用 -->
<property name="pattern" value="[%level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m %n" ></property>
<!--指定Appender为控制台appender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--指定输出流对象,效果就是字体颜色不一样了,默认是System.out是黑色的,这个是红色的 -->
<target>System.err</target>
<!--指定Layout为自定义Layout -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--指定自定义输出格式,${pattern}引用了上面的标签 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--root是默认的logger对象 指定输出级别为ALL -->
<root level="ALL">
<!--指定Appender为 console -->
<appender-ref ref="console"></appender-ref>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--这个配置文件演示了fileappender -->
<!--自定义变量方便其他标签引用 []表示加粗 -->
<property name="pattern" value="[%level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m %n" ></property>
<property name="log_dir" value="/logs"></property>
<!--指定Appender为fileappender -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!--指定Layout为自定义Layout -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--指定自定义输出格式,${pattern}引用了上面的标签 -->
<pattern>${pattern}</pattern>
</encoder>
<!--日志文件保存路径 -->
<file>${log_dir}/logback.log</file>
</appender>
<!--root是默认的logger对象 指定输出级别为ALL -->
<root level="ALL">
<!--指定Appender为 file -->
<appender-ref ref="file"></appender-ref>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--这个配置文件演示了fileappender 不过文件格式是html -->
<!--自定义变量方便其他标签引用,指定输出格式HTML格式的Layout不需要 空格啥的 -->
<property name="pattern" value="%level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m"></property>
<property name="log_dir" value="/logs"></property>
<!--指定Appender为fileappender -->
<appender name="html" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!--指定Layout为HTMLLayout -->
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<!--指定自定义输出格式,${pattern}引用了上面的标签 -->
<pattern>${pattern}</pattern>
</layout>
</encoder>
<!--日志文件保存路径 -->
<file>${log_dir}/logback.html</file>
</appender>
<!--root是默认的logger对象 指定输出级别为ALL -->
<root level="ALL">
<!--指定Appender为 html -->
<appender-ref ref="html"></appender-ref>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--这个配置文件演示了rollingfileappender -->
<!--自定义变量方便其他标签引用 []表示加粗 -->
<property name="pattern" value="[%level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m %n" ></property>
<property name="log_dir" value="/logs"></property>
<!--指定Appender为fileappender -->
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--指定Layout为自定义Layout -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--指定自定义输出格式,${pattern}引用了上面的标签 -->
<pattern>${pattern}</pattern>
</encoder>
<!--日志文件保存路径 -->
<file>${log_dir}/logback.log</file>
<!--指定日志拆分规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--按照时间拆分 gz可以去掉代表压缩 %i指的是生成顺序 -->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd-HH-mm-ss}.log%i.gz</fileNamePattern>
<!--按照文件大小拆分 -->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
<!--root是默认的logger对象 指定输出级别为ALL -->
<root level="ALL">
<!--指定Appender为 rollFile -->
<appender-ref ref="rollFile"></appender-ref>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 诸多配置集合 -->
<property name="pattern1" value="[%level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m %n" ></property>
<property name="pattern2" value="%level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m"></property>
<property name="log_dir" value="/logs"></property>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern1}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern1}</pattern>
</encoder>
<file>${log_dir}/logback1.log</file>
</appender>
<appender name="html" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>${pattern2}</pattern>
</layout>
</encoder>
<file>${log_dir}/logback.html</file>
</appender>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern1}</pattern>
</encoder>
<file>${log_dir}/logback2.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log_dir}/rolling-%d{yyyy-MM-dd-HH-mm-ss}.%i.log</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="rollFile"/>
</appender>
<logger name="cn.shanguoyu.log" level="debug" additivity="false">
<appender-ref ref="console"/>
</logger>
<root level="ALL">
<appender-ref ref="console"></appender-ref>
<appender-ref ref="file"></appender-ref>
<appender-ref ref="html"></appender-ref>
<appender-ref ref="rollFile"></appender-ref>
</root>
</configuration>