Logback是由log4j创始人设计的另一个开源日志组件,性能比log4j要好。
Logback主要分为三个模块:
- logback-core:其它两个模块的基础模块
- logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j APl
- logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能
导入依赖
<!-- 日志门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- 日志实现 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
快速入门
package icu.weizhan;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Logback {
//日志记录器对象
public static final Logger LOGGER = LoggerFactory.getLogger(Logback.class);
@Test
public void logbackTest(){
//日志输出
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
logback配置
logback会依次读取以下类型配置文件:.
- logback.groovy
- logback-test.xml
- logback.xml
如果均不存在会采用默认配置
logback组件之间的关系
1. Logger:日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
2. Appender:用于指定日志输出的目的地,目的地可以是控制台、文件、数据库等等。
3.Layout:负责把事件转换成字符串,格式化的日志信息的输出。在logback中Layout对象被封装在encoder中。
logback.xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- 配置集中管理的格式 我们可以直接改value值,通过name获取value,${name}-->
<!-- 日志输出格式:
%-5level
%d{yyyy—MM-dd HH : mm : ss .SSS} 日期
%c类的完整名称
%M为method
%L为行号
%thread线程名称
%m或者%msg为信息
%n换行
-->
<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="C:/Users/hwz/Desktop/log"></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>
<!-- html格式日志文件输出的appender-->
<appender name="html_file" class="ch.qos.logback.core.FileAppender">
<!-- 日志文件的存放路径 -->
<file>${log_dir}/logback.html</file>
<!-- html日志消息格式设置-->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%-5level%d{yyyy-MM-dd HH:mm:ss.SSS}%c%M%L%thread%m</pattern>
</layout>
</encoder>
</appender>
<!-- 日志拆分和归档压缩的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-HH-mm-ss}.log%i.gz</fileNamePattern>
<!-- 按照文件大小拆分 -->
<maxFileSize>1MB</maxFileSize>
</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 -->
<appender-ref ref="rollFile"></appender-ref>
</appender>
<!-- root logger 配置-->
<root level="ALL">
<appender-ref ref="console"></appender-ref>
<!-- <appender-ref ref="file"></appender-ref>-->
<!-- <appender-ref ref="html_file"></appender-ref>-->
<!-- <appender-ref ref="rollFile"></appender-ref>-->
<appender-ref ref="async"></appender-ref>
</root>
<!-- 自定义 logger对象 配置
additivity="false" 自定义 logger是否继承rootLogger
-->
<logger name="icu.weizhan" level="info" additivity="false">
<appender-ref ref="console"></appender-ref>
</logger>
</configuration>
logback-access的使用
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。我们可以使用logback-access模块来替换tomcat的访问日志。
- 将logback-access.jar与logback-core.jar复制到$TOMCAT_HOME/lib/目录下
- 修改$TOMCAT_HOME/conflserver.xml中的Host元素中添加:<Value className="ch.qos .logback.access.tomcat.LogbackValue"/>
- logback默认会在$TOMCAT_HOME/conf下查找文件 logback-access.xml
logback-access.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<statuListen 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>