logback简介
Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。
-
logback的结构:主要由三个模块组成:
-
logback-core // 基础模块,其他模块基于此
-
logback-classic // 它是log4j的一个改良版本,同时它完整实现了slf4j API,可以更换成其它日志系统,如log4j
-
logback-access // 访问模块与Servlet容器集成提供通过Http来访问日志的功能
-
-
用它取代log4j的理由在于以下优势:
做到了更快的实现、非常充分的测试、很自然地实现了SLF4、非常详尽的官方文档、自动重新加载配置文件、Lilith是log事件的观察者,和log4j的chainsaw类似、谨慎的模式和非常友好的恢复(可以实现多个线程同时写一个日志文件)、配置文件可以处理不同的情况、Filters(过滤器)、SiftingAppender、自动压缩已经打出来的log文件、堆栈树带有包版本、自动去除旧的日志文件等。
logback.xml配置文件详解
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 日志存放路径 -->
<property name="log.path" value="logs/bigunion-file"/>
<!-- 日志输出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/info.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>INFO</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/error.log</file>
<!-- 循环政策:基于时间创建日志文件 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志文件名格式 -->
<fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志最大的历史 60天 -->
<maxHistory>60</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 过滤的级别 -->
<level>ERROR</level>
<!-- 匹配时的操作:接收(记录) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配时的操作:拒绝(不记录) -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 系统模块日志级别控制 -->
<logger name="com.bigunion" level="info"/>
<!-- Spring日志级别控制 -->
<logger name="org.springframework" level="warn" />
<root level="info">
<appender-ref ref="console" />
</root>
<!--系统操作日志-->
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
-
logback配置文件加载说明
logback在启动时:
- 在 classpath 中寻找 logback-test.xml文件
- 如果找不到 logback-test.xml,则在 classpath 中寻找 logback.groovy 文件
- 如果找不到 logback.groovy,则在 classpath 中寻找 logback.xml文件
- 如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现
Configuration
接口,使用它的实现来进行配置 - 如果上述操作都不成功,logback 就会使用它自带的
BasicConfigurator
来配置,并将日志输出到 console
-
打印级别
TRACE
<DEBUG
<INFO
<WARN
<ERROR
,默认DEBUG
logback快速上手
-
依赖的jar包:
slf4j-api
logback-core
logback-classic
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.0.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.11</version> </dependency>
【注】其中slf4j-api不是logback的一部分,是另一个项目,通常结合使用
-
代码示例(两种):
// 第一种,直接声明一个对象 public class Slf4JLoggerTest1 { private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class); public static void main(String[] args) { logger.info("Hello,tese1, this is a line of log message logged by Logback"); } } // 第二种,在类的配置上添加@slf4j注解(**借助lombok实现,原理同第一种**) @Slf4j public class Slf4JLoggerTest2 { public static void main(String[] args) { log.info("Hello,tese2, this is a line of log message logged by Logback"); } }