近期对系统中的旧项目实现log升级,选择了log4j2来取代log4j。作为最新一代的log实现。log4j2好在那里能够直接看log4j2性能章节

这里写写怎样从log4j升级到log4j2。

1. maven依赖的变化。对log4j的依赖变成了对log4j2的依赖,在实际使用过程中发现过旧的jboss logging会有问题,使用了3.3.0.Final支持log4j2的版本号。

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>${jboss-logging.version}</version>
</dependency>
<dependency>
  1. log4j配置的变化。配置文件从log4j.xml变成了log4j2.xml,配置文件的内容也有非常大不同。log file如今能够同一时候支持时间和文件大小切割。并且log4j2支持log的动态变化载入。直接指定监控周期就可。以下给出一个简单配置样例。

    样例中使用了async模式。rollfile本身必须设置成immediateflush=“false”,然后创建一个async 节点,通过async节点网rollfile里面写日志。注意为了显示文件行数,方法名等信息增加了includelocation=“true”,在官方文档对这个有特别说明。对性能有影响。能不用就不用。

    另:log4j2支持很多其它的filter机制,有兴趣能够好好看看,对复杂日志系统的日志过滤非常有帮助。

    对于真实环境中,error/aduit日志须要单独存放。最好不使用async模式,防止log丢失。log4j环境要实现同一时候按时间和大小截断日志文件的话能够考虑结合操作系统的cronjob来实现按时间截断打包,log4j本身指关心按大小截断。

<?xml version="1.0" encoding="UTF-8"?>
<configuration monitorInterval="60">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/sample.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz" immediateFlush="false" append="true">
<PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50 MB" />
<DefaultRolloverStrategy max="10" />
</RollingFile>
<Async name="Async" includeLocation="true">
<AppenderRef ref="RollingFile" />
</Async>
</appenders>
<loggers>
<logger name="com.cloud.demo" additivity="false" level="trace">
<AppenderRef ref="Async" level="trace"/>
</logger>
<AsyncLogger name="com.cloud.demo.service.impl.NewsServiceImpl" level="trace" includeLocation="false">
<AppenderRef ref="RandomAccessFile"/>
</AsyncLogger>
<logger name="org.springframework" additivity="false" level="warn">
<AppenderRef ref="Async" level="warn"/>
</logger>
<root level="info">
<AppenderRef ref="Async"/>
</root>
</loggers>
</configuration>
  1. Web项目中使用log4j的变化。由于log4j2能够自己主动监听log配置文件修改,所以一般使用的spring log4j listener就不再须要了,在servlet3.0中不须要在web.xml增加不论什么log4j2的配置,假设是servlet2.5就须要增加Log4jServletContextListener和Log4jServletFilter等配置,详细可见log4j2在Web中配置

最新文章

  1. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
  2. 边工作边刷题:70天一遍leetcode: day 85-4
  3. Valid Palindrome [LeetCode]
  4. 一步一步学习Unity3d学习笔记系1.1
  5. netty 入门
  6. [改善Java代码]避开基本类型数组转换列表陷阱
  7. windows server 2012服务器IIS基本配置
  8. W - Bitset(第二季水)
  9. Python核心编程读笔 6: 映射和集合类型
  10. struts2(二)之配置文件详解与结果视图
  11. selenium 定位input输入框下的选择项
  12. Java学习笔记11---静态成员变量、静态代码块、成员变量及构造方法的初始化或调用顺序
  13. 使用Selenium+ChromeDriver登录微博并且获取cookie
  14. Windows系统Nessus离线(Offline) 版的安装
  15. 关于ubuntu远程访问服务器的知识点
  16. linux 单次定时任务
  17. POI 导入导出时异常[java.io.IOException: Broken pipe]
  18. vscode sync插件 在不同设备 同步的坑
  19. 【Android自动化】在使用uiautomator框架自动化时,往往有时再运行脚本时发现xxx实例属性不被允许
  20. 详解Tensorflow数据读取有三种方式(next_batch)

热门文章

  1. Sqlite3的安装Windows
  2. 陈-朱-兴- js写法【案例】:
  3. zzulioj--1807--小明在努力(递归)
  4. 6.CPU调度
  5. CUDA笔记13
  6. Bayes++ Library入门学习之熟悉UKF相关类
  7. js字符串排序方法
  8. 20180929 北京大学 人工智能实践:Tensorflow笔记07
  9. Unity C# 关于设计模式的思考
  10. ArcGIS api for javascript——创建地图