这是在公司内部的一次进级实践,删除了许多隐私的内容,所以大概不是很完整。
1、配景
在任何系统中,日志都长短常重要的构成部门,它是反应系统运行环境的重要依据,也是排盘查题时的须要线索。绝大大都人都承认日志的重要性,可是又有几多人仔细想过该怎么打日志,日志对机能的影响毕竟有多大呢?
新的Log4j 2.0版本有了大幅的机能晋升、新的插件系统,以及设置配置方面的许多改进。Log4j 1.x 在高并发环境下呈现死锁导致cpu利用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程情况下机能会远远优于Log4j 1.x和logback ——官方测试功效。
本次进级是以thrift处事化项目为例子举办的,后续会在其他项目中举办,本次事情内容为:Log4j1.x 进级到 Log4j2(假如不想相识道理,可以直接跳到:3、进级方法)
2、log4j2说明
2.1 特性
2.2 机能
吞吐量测试

平均耗时

个中:
更多机能测试信息可参考官方陈诉:
http://logging.apache.org/log4j/2.x/manual/async.html#Performance
http://logging.apache.org/log4j/2.x/performance.html
2.3 主要组件

2.4 设置
Configuration
示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="pattern_layout">%d %-5p (%F:%L) - %m%n</Property>
<Property name="LOG_HOME">/var/***/logs</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${pattern_layout}"/>
</Console>
<RollingRandomAccessFile name="file"
fileName="${LOG_HOME}/${sys:app.key}.log"
filePattern="${LOG_HOME}/${sys:app.key}.log.%d{yyyy-MM-dd}">
<PatternLayout pattern="${pattern_layout}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="access_kpi"
fileName="${LOG_HOME}/${sys:app.key}_access_kpi.log"
filePattern="${LOG_HOME}/${sys:app.key}_access_kpi.log.%d{yyyy-MM-dd}">
<PatternLayout pattern="${pattern_layout}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="jmonitorappender"
fileName="${LOG_HOME}/${sys:app.key}.jmonitor.log"
filePattern="${LOG_HOME}/${sys:app.key}.jmonitor.%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="${pattern_layout}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
<RollingRandomAccessFile name="jmonitorlogstoreappender"
fileName="${LOG_HOME}/${sys:app.key}.jmonitor.logstore.log"
filePattern="${LOG_HOME}/${sys:app.key}.jmonitor.logstore.%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="${pattern_layout}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingRandomAccessFile>
<Scribe name="errorLog">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<Property name="hostname">${sys:app.key}</Property>
<Property name="scribeHost">127.0.0.1</Property>
<Property name="scribePort">4252</Property>
<Property name="scribeCategory">cos_errorlog</Property>
<Property name="printExceptionStack">false</Property>
<Property name="addStackTraceToMessage">false</Property>
<Property name="timeToWaitBeforeRetry">6000</Property>
<Property name="sizeOfInMemoryStoreForward">100</Property>
<PatternLayout
pattern="%d %p $${sys:app.host} $${sys:app.ip} errorlog appkey=$${sys:app.key} location=%F:%L rawlog=%replace{%replace{%m}{=}{:}}{\n|\t}{<br/>} rawexception=%replace{%replace{%ex}{=}{:}}{\n|\t}{<br/>}%n"/>
</Scribe>
</Appenders>
<Loggers>
<Logger name="access_kpi" level="INFO" includeLocation="true" additivity="false">
<AppenderRef ref="access_kpi"/>
</Logger>
<!-- tair Loggers -->
<Logger name="com.taobao.tair3.client" level="WARN" includeLocation="true" additivity="false">
<AppenderRef ref="file"/>
<AppenderRef ref="errorLog"/>
</Logger>
<!-- 3rdparty Loggers -->
<Logger name="org.springframework" level="WARN"/>
<Logger name="org.apache.zookeeper" level="ERROR"/>
<Logger name="org.springframework.web" level="WARN"/>
<!-- Root Logger -->
<Root level="INFO" includeLocation="true">
<AppenderRef ref="file"/>
<AppenderRef ref="console"/>
<AppenderRef ref="errorLog"/>
</Root>
</Loggers>
</Configuration>