logback简介及配置详解

logback简介及配置详解

官方网站: http://logback.qos.ch。

  1. logback主要由三个模块组成:
    • logback-core // 基础模块,其他模块基于此
    • logback-classic // 它是log4j的一个改良版本,同时它完整实现了slf4j API,可以更换成其它日志系统,如log4j
    • logback-access // 访问模块与Servlet容器集成提供通过Http来访问日志的功能
  2. 优势:

    做到了更快的实现、非常充分的测试、很自然地实现了SLF4、非常详尽的官方文档、自动重新加载配置文件、Lilith是log事件的观察者,和log4j的chainsaw类似、谨慎的模式和非常友好的恢复(可以实现多个线程同时写一个日志文件)、配置文件可以处理不同的情况、Filters(过滤器)、SiftingAppender、自动压缩已经打出来的log文件、堆栈树带有包版本、自动去除旧的日志文件等。

logback.xml配置文件详解




<configuration scan="true">
    
    
    <property name="CATALINA_BASE" value="**/logs">property>
    
    
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
 
    
    <appender name="FILE1" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${CATALINA_BASE}/aa.%d{yyyyMMdd}.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>
        <encoder charset="UTF-8">
            
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
 
    
    <appender name="FILE2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${CATALINA_BASE}/bb.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${CATALINA_BASE}/bb.%d{yyyyMMdd}.logfileNamePattern>
            <maxHistory>30maxHistory>
        rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
    
    <appender name="CUSTOM" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${CATALINA_BASE}/custom.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${CATALINA_BASE}/custom.%d{yyyy-MM-dd}.logfileNamePattern>
            
            <maxHistory>30maxHistory>
        rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>
    
    
    <root level="ERROR">
        <appender-ref ref="CONSOLE" />
    root>
    <logger name="file1" level="DEBUG">
        <appender-ref ref="FILE1" />
    logger>
    <logger name="file1" level="INFO">
        <appender-ref ref="FILE2" />
    logger>
    
    <logger name="custom" level="INFO">
        <appender-ref ref="CUSTOM" />
    logger>
configuration>

一个元素

0或多个

0或多个

logback简介及配置详解_第1张图片

  1. logback配置文件加载说明

    logback在启动时:

    1. 在 classpath 中寻找 logback-test.xml文件
    2. 如果找不到 logback-test.xml,则在 classpath 中寻找 logback.groovy 文件
    3. 如果找不到 logback.groovy,则在 classpath 中寻找 logback.xml文件
    4. 如果上述的文件都找不到,则 logback 会使用 JDK 的 SPI 机制查找 META-INF/services/ch.qos.logback.classic.spi.Configurator 中的 logback 配置实现类,这个实现类必须实现 Configuration 接口,使用它的实现来进行配置
    5. 如果上述操作都不成功,logback 就会使用它自带的 BasicConfigurator 来配置,并将日志输出到 console
  2. 打印级别

    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 Test1 {
    private static final Logger logger = LoggerFactory.getLogger(SimpleDemo.class);
    public static void main(String[] args) {
        logger.info("Hello,this is a line of log message logged by Logback");
    }
}


// 第二种,在类的配置上添加@slf4j注解(**借助lombok实现,原理同第一种**)
@Slf4j
public class Test2 {
    public static void main(String[] args) {
        log.info("Hello,this is a line of log message logged by Logback");
    }
}

你可能感兴趣的:(java)