目录
官方文档
Dependency
implementation 'org.slf4j:slf4j-api:1.7.28'
implementation 'ch.qos.logback:logback-classic:1.2.3'
日志配置
简单配置输出日志到控制台。在项目 /resources
目录中添加 logback.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<contextName>netty</contextName>
<property name="CONSOLE_LOG_PATTERN"
value="%highlight(%d{yyyy-MM-dd HH:mm:ss.SSS} %5.5level [%20.20t] %15.15logger{15} : %m) %n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="com.mini" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
1. logback 每次运行创建新的日志文件
<appender name="FILE_NORMAL" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/${FILE_DEBUG}</file>
<append>false</append>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
2. logback 按级别输出到不同文件
- 在 appender 中增加Filter
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<!-- 只有大于或等于指定级别的日志才会输出 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
- 在 logger 中定义多个 Appender
<logger name="cn.xxx.xxx.cle" level="debug" additivity="false">
<appender-ref ref="FILE_NORMAL"/>
<appender-ref ref="STDOUT"/>
</logger>
3. Logback 控制台中文乱码
- 在 appender 的 encoder 中设置 charset 节点。
<!-- 打印到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
[ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
</appender>
- 启动 Jar 时,加入参数:
Dfile.encoding=utf-8
4. Logback 输出路径设置
<property name="LOG_HOME" value="/logs"/>
说明
- value=“logs” 保存到程序运行目录,在tomcat中为bin目录
- value=“/logs” 保存到运行目录所在系统盘符根目录
- value=“…/logs” 保存到程序运行目录的父目录
附件
常用 Filter
filter 学习
https://blog.youkuaiyun.com/Doraemon_wu/article/details/52072360
- LevelFilter
如果等于配置的level,则过滤器通过,否则拒绝。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
- ThresholdFilter
当 logging event 的 level 大于等于配置等级,才能通过过滤器。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>