官网文档 | 中文文档
logback-classic 默认导入了 slf4j 以及 logback-core(都是一个人的嘛)
1 2 3 4 5
| <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.8</version> </dependency>
|
默认日志级别debug (复杂日志框架(log4j logback)都是debug,简单实现日志框架(jul slf4j-sample)都是info)
1 2 3 4 5 6 7 8
| @Test public void testQuick() { logger.error("error"); logger.warn("warn"); logger.info("info"); logger.debug("debug"); logger.trace("trace"); }
|
配置文件
可以通过 PropertiesTranslator 将log4j.properties 转化为xml形式
logback会依次读取以下类型配置文件:
- logback.groovy
- logback-test.xml
- logback.xml
- 如果均不存在会采用默认配置(BasicConfigurator,直接输出到控制台上)
logback组件之间的关系
- Logger: 日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也 可以定义日志类型、级别;
- Appender: 用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等;
- Layout: 负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封 装在encoder中。
配置文件详情
大写的简化形式都不推荐,影响性能问题
格式化 |
含义 |
备注 |
%-5level = %p = %le |
日志级别 |
|
%d{yyyy-MM-dd HH:mm:ss.SSS} |
日期 |
|
%c{length} = %logger = %lo |
类的完整名称 |
后面数字代表简写的形式不代表长度 |
%thread= %t |
线程名称 |
|
%r = %relative |
程序启动到创建日志记录的时间 |
单位是毫秒 |
%m = %msg |
信息 |
|
%n |
换行 |
|
%C = %class |
全限定类名 |
避免使用 |
%M |
method |
避免使用 |
%L |
行号 |
避免使用 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <!--配置集中管理属性--> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!--控制输出流对象,默认为System.out 变为红色字体--> <target>System.err</target> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> </appender>
<root level="ALL"> <appender-ref ref="console"/> </root> </configuration>
|
文件输出
一般封装好的类都处于classic包下面,没有封装好的,进行二次开发的都处于core包下面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/>
<appender name="file" class="ch.qos.logback.core.FileAppender"> <file>${log_dir}/logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> </appender>
<root level="ALL"> <appender-ref ref="file"/> </root> </configuration>
|
自定义html输出
一般封装好的类都处于classic包下面,没有封装好的,进行二次开发的都处于core包下面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/> <appender name="file" class="ch.qos.logback.core.FileAppender"> <file>${log_dir}/logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> </appender> <appender name="html" class="ch.qos.logback.core.FileAppender"> <==classic包下面 <file>${log_dir}/logback.html</file> <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> <==core包下面 <layout class="ch.qos.logback.classic.html.HTMLLayout"> <==classic包下面 <pattern>%d{HH:mm:ss.SSS} %thread %-5level %c{36} - %msg%n</pattern> </layout> </encoder> </appender>
<root level="ALL"> <appender-ref ref="file"/> <appender-ref ref="html"/> </root> </configuration>
|
日志拆分和归档压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_dir}/roll_logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <maxFileSize>1mb</maxFileSize> <fileNamePattern>${log_dir}/roll_logback.%d{yyyy-MM-dd-HH-mm-ss}.log%i.zip</fileNamePattern> </rollingPolicy> </appender>
<root level="ALL"> <appender-ref ref="rollFile"/> </root> </configuration>
|
日志过滤器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_dir}/roll_logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <maxFileSize>1mb</maxFileSize> <fileNamePattern>${log_dir}/roll_logback.%d{yyyy-MM-dd-HH-mm-ss}.log%i.zip</fileNamePattern> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <== 过滤器 <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
<root level="ALL"> <appender-ref ref="rollFile"/> </root> </configuration>
|
异步日志记录
异步日志借助其他的appender完成异步任务,底层使用阻塞队列完成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_dir}/roll_logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <maxFileSize>1mb</maxFileSize> <fileNamePattern>${log_dir}/roll_logback.%d{yyyy-MM-dd-HH-mm-ss}.log%i.zip</fileNamePattern> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="async" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="rollFile"/> <== 借助rollFile完成异步任务 </appender>
<root level="ALL"> <appender-ref ref="async"/> </root> </configuration>
|
自定义Logger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?xml version="1.0" encoding="UTF-8"?>
<configuration> <property name="pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %c{36} - %msg%n"/> <property name="log_dir" value="./logs"/>
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log_dir}/roll_logback.log</file> <append>true</append> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${pattern}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <maxFileSize>1mb</maxFileSize> <fileNamePattern>${log_dir}/roll_logback.%d{yyyy-MM-dd-HH-mm-ss}.log%i.zip</fileNamePattern> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
<root level="ALL"> <appender-ref ref="rollFile"/> </root> <logger name="cn.quguai" level="info" additivity="false"> <appender-ref ref="console"/> </logger> </configuration>
|
注意:即使会输出root级别的文件,但是大小均为0kb。
logback-access的使用
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使 用logback-access模块来替换tomcat的访问日志。
将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下
修改$TOMCAT_HOME/conf/server.xml中的Host元素中添加:
1
| <Valve className="ch.qos.logback.access.tomcat.LogbackValve" />
|
logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="UTF-8"?> <configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/> <property name="LOG_DIR" value="${catalina.base}/logs"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/access.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>access.%d{yyyy-MM-dd}.log.zip</fileNamePattern> </rollingPolicy> <encoder> <pattern>combined</pattern> <== logback集成的格式信息可以参考下方链接 </encoder> </appender> <appender-ref ref="FILE"/> </configuration>
|
官方配置: https://logback.qos.ch/access.html#configuration