Log4j2 的配置、使用
最近公司让调研log4j2在Android中的使用,在网上查了很多资料,在这做个总结,一起学习,参考了许多文章,文末都有链接,感谢大佬们的文章
Log4j2 简介
log4j2是log4j 1.x 的升级版,2015年5月,Apache宣布log4j1.x 停止更新。最新版:官网下载
log4j2参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有:
-
异常处理:在logback中,Appender中的异常不会被应用感知到,但是在log4j2中,提供了一些异常处理机制。
-
性能提升:log4j2相较于log4j 1和logback都具有很明显的性能提升。
-
自动重载配置:参考了logback的设计,提供自动刷新参数配置,可以动态的修改日志的级别而不需要重启应用。
-
无垃圾机制,log4j2在大部分情况下,都可以使用其设计的一套无垃圾机制,避免频繁的日志收集导致的jvm gc。
Log4j2 配置
log4j2 既可以采用xml方式配置,也可采用代码的方式配置
在本文中是实现日志过滤,然后存入文件,按照一定大小分割文件。
直接这样添加会报错,网上给出的解决办法:
在app gradle中添加一下代码:
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
不懂这是什么意思但是添加上就没问题了,知道的在下方评论一起学习吧。
-
xml方式配置:
先上代码,xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="debug" >
<appenders>
<!--这个输出控制台的配置-->
<console name="Stdout" target="SYSTEM_OUT">
<!--输出日志的格式-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>
</console>
<RollingFile name="rolling" fileName="mnt/sdcard/rolling.log"
filePattern="mnt/sdcard/rolling-%d{yyyy-MM-dd}-%i.txt" >
<MarkerFilter marker="NAME" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%c{1}-%p %l] %m%n"/>
<Policies>
<!-- 基于指定文件大小的滚动策略,设置日志文件满1MB后打包,,size属性用来定义每个日志文件的大小 -->
<SizeBasedTriggeringPolicy size="1M"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,默认最多7个文件