Log4j2 Analysis

本文详细对比了Log4j2与Log4j在性能上的改进,包括使用LMAX Disruptor技术实现的AsyncLogger,提供更高吞吐量和更低延迟。文中还介绍了参数化消息、运行时日志级别更改、不同Appender配置,以及如何在Web应用中减少垃圾回收。

Log4j2 improvement compare with Log4j : 
    AsyncLogger : 
        Implemented by LMAX Disruptor technology (a lock-free inter-thread communication library, instead of queues, resulting in higher throughput and lower latency) .
        Better performance than AsyncAppender(Internally Using JDK ArrayBlockingQueue )
    Garbage free  or Low garbage when running in web  application . 
    Parameterized Messages 
    
Migration  
    Add bridge jar provided by log4j2 
            Slf4j                      log4j-slf4j-impl.jar               route log request to log4j2
            Log4j                      log4j-1.2-api.jar (missing in our nexus repository)      
            Common Logging            log4j-jcl.jar 
    
    MDC to ThreadContext.
        To track all the logs related to a specific request by  a transaction ID . 
        ThreadContext.put(key,value)
        layout: %X{key}
        
    Change Log Level at Runtime : 
        Loggng servlet  
            get All Loggers : LogManager.getCurrentLoggers()  --->   LoggerContext.getLoggers()
            set LogLevel : log.setLevel   --->  Configurator.setLevel(loggerName, logLevel);
            
            

Appender:
    RollingFileAppender:
        -Dnode=node1 
        <RollingFile name="cache_log" fileName="log/aspen-data-service-cache-${sys:node}.log"
            filePattern="log/aspen-data-service-cache-${sys:node}.log.%i">
            <PatternLayout
                pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{user}][%X{requestId}]@[%X{method}][%t] %-5p [%logger{36}:%L] - %msg%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="50MB" />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    
    FileAppender, RollingFileAppender, RollingRandomAccessFileAppender :   (When set bufferedIO = true , log will be written to buffer . Better performance . Downside : buffer data might be lost when system got shutdown  )
    Console:
    AsyncAppender: Wrap other append and write log in seperate thread  .  (Lock free AsyncLogger is better)
    JDBC,Kafka
    
Enable AsyncLogger     :
    Add disruptor-3.0.0.jar(missing in our nexus repository) or higher was required. 
    
      All Loggers Asynchronous : 
        Set system property -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.
            All normal loggers like <Root> and <Logger>  will be asynchronous . 
    
      Mixture mode:
        No need to set system property "log4j2.contextSelector" to any value . 
        Use the <asyncRoot> or <asyncLogger> configuration elements to specify the loggers that need to be asynchronous.
    
    
Externalize Log Configuration : 
    -Dlog4j.configurationFile=file:///filePath
    

    
    


    

转载于:https://my.oschina.net/yixinnemo/blog/2209083

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值