这是在公司内部的一次进级实践,删除了许多隐私的内容,所以大概不是很完整。
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>