前置知识:
Logback概述
Logback是由log4j、slf4j创始人Ceki Gülcü设计的另一个开源日志组件,性能比log4j要好。它自然地实现了slf4j规范。
Logback主要分为三个模块:
logback-core
:logback的核心模块,也是其它两个模块的基础模块logback-classic
:它是log4j的一个改良版本,同时它完整实现了slf4jAPIlogback-access
: 访问模块与Servlet容器集成提供通过Http来访问日志的功能
Logback的核心组件:
- Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
- Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
- Layout:负责把事件转换成字符串,格式化的日志信息的输出。在 logbackLayoutencoder中对象被封装在中。
Logback使用
maven依赖:
这里使用slf4j来管理
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
Logback配置
logback会依次读取以下类型配置文件:
+ logback.groovy
+ logback-test.xml
+ logback.xml
如果均不存在会采用默认配置
logback官方提供的log4j配置转logback配置工具:http://logback.qos.ch/translator/
基本配置
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n"></property>
<property name="log_dir" value="/logs"></property>
<!-- 控制台日志输出的 appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 控制输出流对象,默认System.out改为System.err-->
<target>System.err</target>
<!-- 日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>{pattern}</pattern>
</encoder>
</appender>
<!-- 日志文件输出的 appender-->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件保存路径 -->
<file>{log_dir}/logback.log</file>
<!-- 日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- root logger 配置-->
<root level="ALL">
<appender-ref ref="console"></appender-ref>
<appender-ref ref="file"></appender-ref>
</root>
</configuration>
pattern常用转换符:
%c/%logger
:输出日志的logger名,可有一个整形参数,功能是缩短logger名,例如%logger{5}%cn
:输出上下文名称。%d{pattern}
:输出日志的打印日志,模式语法与java.text.SimpleDateFormat
兼容。%p/%le/%level
:输出日志级别。%t/%thread
: 输出产生日志的线程名。%n
:输出平台相关的分行符“\n”或者“\r\n”。%m/%msg/%message
:输出应用程序提供的信息。%L/%line
:输出执行日志请求的行号。
使用HTML格式输出:
<!-- 日志文件输出的 appender-->
<appender name="htmlFile" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件保存路径 -->
<file>${log_dir}/logback.html</file>
<!-- 日志消息格式配置-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
</layout>
</encoder>
</appender>
动态刷新配置
根节点configuration
可以配置两个属性:
scan
: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod
: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
通过配置这两个属性,可以在系统运行时修改logback的配置而不需要重写部署,例如修改日志级别
<configuration scan="true" scanPeriod="60 seconds">
<!-- ... -->
</configuration>
日志拆分和归档压缩的appender
<appender name="rollFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件保存路径 -->
<file>{log_dir}/roll_logback.log</file>
<!-- 日志消息格式配置-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>{pattern}</pattern>
</encoder>
<!-- 指定拆分规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间和压缩格式声明拆分的文件名 -->
<fileNamePattern>${log_dir}/rolling.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
<!-- 按照文件大小拆分 -->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
过滤器
写在Appender中
级别过滤器:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 日志过滤规则 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
其他的还有ThresholdFilter(临界值过滤器)、EvaluatorFilter(求值过滤器)等。
异步日志
<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
<!-- 指定某个具体的appender -->
<appender-ref ref="file"></appender-ref>
</appender>
自定义Logger
<!-- 自定义logger对象
additivity:是否继承自rootLogger
-->
<logger name="com.rhett.consoleLogger" level="INFO" additivity="false">
<appender-ref ref="console"></appender-ref>
</logger>
logback-access的使用
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-acces模块来替换tomcat的访问日志。
步骤:
- 将
logback-access.jar
与logback-core.jar
复制到$TOMCAT_HOME/lib/
目录下 - 在
$TOMCAT_HOME/conf/server.xml
中的Host元素中添加:
<Value className="ch.qos.logback.access.tomcat.LogbackValue" />
- logback默认会在
$TOMCAT_HOME/conf
下查找文件logback-access.xml
示例配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- always a good activate OnConsoleStatusListener-->
<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>
</encoder>
</appender>
<appender-ref ref="FILE"/>
</configuration>
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/java%e6%97%a5%e5%bf%97%e6%a1%86%e6%9e%b6logback%e4%bb%8b%e7%bb%8d%e5%92%8c%e4%bd%bf%e7%94%a8/