Logback 源码分析

概述

logback 1.2.3


    ch.qos.logback
    logback-classic
    1.2.3

包含3个模块:

  • Maven: org.sl4j: sl4j-api: 1.7.25
    sl4j-api-1.7.25.jar
  • Maven: ch.qos.logback: logback-core: 1.2.3
    logback-core-1.2.3.jar
  • Maven: ch.qos.logback: logback-classic: 1.2.3
    logback-classic-1.2.3.jar

Xml配置文件 Demo

xml配置文件不提供xsd或dtd等schema文件,原因如官网所述

As will be demonstrated over and over, the syntax of logback configuration files is extremely flexible. As such, it is not possible to specify the allowed syntax with a DTD file or an XML schema.

Demo

logback.xml


    

    
        ${ROOT_DIR}/demo.log
        
            ${ROOT_DIR}/demo-%d{yyyy-MM-dd}#%i.log
            100MB
        
        
            %-40(%date{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) [%thread]) \(%class:%line\) %-6([%logger]) %msg%n
        
    

    
        
        true
    

    
        
    


rollingPolicy dictate RollingFileAppender's behavior when rollover occurs.
triggeringPolicy tell RollingFileAppender when to activate the rollover procedure.

Logback 源码分析_第1张图片
日志输出结构
Logback 源码分析_第2张图片
日志输出

如果includeCallerData不设为trueAsyncAppender将无法输出class name和line number,但单纯的同步的RollingFileAppender不受影响。

demo.log为当天日志,历史日志以fileNamePattern中的格式命名。

源码分析

配置文件及Logger初始化

一般需要同时设置rollingPolicytriggeringPolicy,但SizeAndTimeBasedRollingPolicy类也实现了TriggeringPolicy接口,所以无需再额外设置triggeringPolicy

encoderpattern的格式书写在官网的Ch 6: Layouts中
% 和 ) 均为token,需要转义再使用
pattern字符串的解析及Converter的构建工作由PatternLayoutEncoderPatternLayout等类完成。
Token类包含了对pattern进行词法分析行的token,如"LITERAL" "SIMPLE_KEYWORD" "%" "RIGHT_PARENTHESIS"等
PatternLayout类包含了pattern中的关键字,如"date" "thread"等

LoggerFactory.getLogger()时序图

Logback 源码分析_第3张图片
SequenceDiagram LoggerFactory.getLogger()

Logger类图

Logback 源码分析_第4张图片
ClassDiagram Logger

Logger.info()时序图

Logback 源码分析_第5张图片
SequenceDiagram Logger.info()

AsyncAppender内部的日志队列是由ArrayBlockingQueue实现的。
如果程序正常退出或是JVM崩溃等,AsyncAppender还未来得及将队列中的日志全部输出,则日志有可能会丢失。

你可能感兴趣的:(Logback 源码分析)