作为一个JAVA开发者,log4j的名字,大家没用过至少也听过,作为一个名声在外的日志打印工具,至今已有10几年的历史了。其1.X的版本,停留在了1.2.7,且在2012年就停止更新了。作为1.X的优化版本,log4j2至今已有6年的发展历史了,这边简单就其进行一些介绍。
简介
关于log4j2的改进,大家可以上官网查看,这边简单进行一些翻译。
- log4j2被设计作为一种审计日志的框架,即当reconfiguring的时候不会产生日志丢失的现象
- log4j2 包含了下一代的 Asynchronous Loggers ,当在多线程的场景,Asynchronous Loggers比log4j1.X和logback能有高达10倍的吞吐和更为低的时延。
- log4j2对GC更友好,能减轻进程的GC压力
- 更为方便使用的插件系统
- 配置更为简单和人性化
- 支持定义的日志级别
- 支持lambda表达式
- 支持 消息对象
- 对Filter的更好的支持
- 允许数据以各种形式传输
- Layout返回byte类型而不是string类型
- 支持TCP、UDP和BSD系统日志和RFC 5424 格式
- 利用Java5的并发特性,解决了log4j1.X版本的死锁问题
- 开源,支持代码贡献
使用教程
这边简单介绍一下其使用的方式
- 首先引入相应的jar包,已maven为例
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
- 配置文件置于classpath中(会默认按照这类顺序查找),以下为例
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Appenders>
<!-- filePattern must use %i so that DefaultRolloverStrategy max take effective-->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%i.log">
<PatternLayout>
<Pattern>%-d{yyyy-MM-dd HH:mm:ss}|%p|%X{IP}|%t|%X{TranslocationID}|%F:%L|%m%n</Pattern>
</PatternLayout>
<Policies>
<!--<TimeBasedTriggeringPolicy interval="1"/>-->
<!-- each log file take 100MB -->
<SizeBasedTriggeringPolicy size="100MB"/>
</Policies>
<!-- rolling with max 25 -->
<DefaultRolloverStrategy max="25"/>
</RollingFile>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>%-d{yyyy-MM-dd HH:mm:ss}|%p|%X{IP}|%t|%X{TranslocationID}|%F:%L|%m%n</Pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<!-- change to INFO or above in production envirionment -->
<Root level="debug">
<AppenderRef ref="RollingFile"/>
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
请忽视%X{IP}
和%X{TranslocationID}
,这是我们内部定义的占位符。
- 调用
private static final Logger LOGGER=LogManager.getLogger();
public static void main(String[] args) {
LOGGER.info("this is my {} log","first");
}
2018-08-22 14:51:21|INFO||main||Test.java:13|this is my first log
以上就是log4j2的入门,更为详细的配置点击这里