java日志详解--logback

前言

​ 关于logback这块,相关的文章比较多,而本人研究也不是比较深入,因此这篇文章只是本人的配置过程以及其他几篇深入介绍的文章,当作记录使用,希望能帮到自己和读者。

正文

对比log4j的优势:

更快的实现
Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。

非常充分的测试
Logback经过了几年,数不清小时的测试。Logback的测试完全不同级别的。在作者的观点,这是简单重要的原因选择logback而不是log4j。

Logback-classic非常自然实现了SLF4j
Logback-classic实现了SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J,所以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的代码。

非常充分的文档
官方网站有两百多页的文档。

自动重新加载配置文件
当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。

Lilith
Lilith是log事件的观察者,和log4j的chainsaw类似。而lilith还能处理大数量的log数据

谨慎的模式和非常友好的恢复
在谨慎模式下,多个FileAppender实例跑在多个JVM下,能够安全地写道同一个日志文件。RollingFileAppender会有些限制。Logback的FileAppender和它的子类包括RollingFileAppender能够非常友好地从I/O异常中恢复。

配置文件可以处理不同的情况
开发人员经常需要判断不同的Logback配置文件在不同的环境下(开发,测试,生产)。而这些配置文件仅仅只有一些很小的不同,可以通过,和来实现,这样一个配置文件就可以适应多个环境。

Filters(过滤器)
有些时候,需要诊断一个问题,需要打出日志。在log4j,只有降低日志级别,不过这样会打出大量的日志,会影响应用性能。在Logback,你可以继续保持那个日志级别而除掉某种特殊情况,如alice这个用户登录,她的日志将打在DEBUG级别而其他用户可以继续打在WARN级别。要实现这个功能只需加4行XML配置。可以参考MDCFIlter

SiftingAppender(一个非常多功能的Appender)
它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。

自动压缩已经打出来的log
RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。

堆栈树带有包版本
Logback在打出堆栈树日志时,会带上包的数据。

自动去除旧的日志文件
通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory为12,那那些log文件超过12个月的都会被自动移除。

简易配置:

  1. 导入依赖包官网下载页面

  2. 在classpath中添加logback.xml文件

  3. 配置文件

    
    
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logbackcontextName>
    <property name="log.path" value="${TEST_LOG}/queue" />
    
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
        
        <encoder>
            <pattern>[%thread] %-5level %logger{36}- %msg%npattern>
        encoder>
    appender>
    
    <appender name="file"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <file>${log.path}/queue.logfile>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <FileNamePattern>${log.path}/queue.%d{yyyy-MM-dd}.logFileNamePattern>
            
            <maxHistory>90maxHistory>
            
            
        rollingPolicy>
        
        <encoder>
            <charset>UTF-8charset>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36}
                - %msg%npattern>
        encoder>
    appender>
    
    <root level="debug">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    root>
    configuration>
  4. 测试代码

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class LogbackDemo {
    
    private static final Logger log = LoggerFactory.getLogger(LogbackDemo.class);
    
    public static void main(String[] args){
        log.debug("debug msg");
        log.info("info msg");
        log.warn("warn msg");
        log.error("error msg");
    }
    }
    // 测试结果
    [main] INFO  com.paditang.demo.LogbackDemo- info msg
    [main] WARN  com.paditang.demo.LogbackDemo- warn msg
    [main] ERROR com.paditang.demo.LogbackDemo- error msg
    
    // 文件输出
    13:32:56.888 logback [main] INFO  com.paditang.demo.LogbackDemo
                - info msg
    13:32:56.888 logback [main] WARN  com.paditang.demo.LogbackDemo
                - warn msg
    13:32:56.888 logback [main] ERROR com.paditang.demo.LogbackDemo
                - error msg
    

详细配置

参考文章:

logback logback.xml常用配置详解(一)configuration logger

logback logback.xml常用配置详解(二)appender

logback logback.xml常用配置详解(三)filter

总结

​ 可以看到logback作为java日志框架,不仅性能上领先于log4j,而且在细致化配置的方面同样更具优势。因此我们应该拥抱变化,采用更先进的日志配置框架–logback

你可能感兴趣的:(JAVA,java,logback)