log4j1升级log4j2
- 删除log4j-1.x.jar,然后增加log4j2.x的三个jar包:log4j-api-2.12.1.jar和log4j-core-2.12.1.jar和一个中间桥接包log4j-1.2-api-2.12.1.jar
- 增加log4j2.xml配置文件
- 完成前面两步基本就可以了,如果仍然有不兼容的部分则修改代码使用log4j2的api
注意: log4j2.12版本是支持jdk1.7,而log4j2.13及以上版本最低要求是jdk1.8
下载地址 https://mirrors.bfsu.edu.cn/apache/logging/log4j/2.12.1/
官网文档 https://logging.apache.org/log4j/2.x/index.html
https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html
log4j2通log4j-1.2-api-2.12.1.jar中间包,实现对log4j1的兼容,如果没有自己继承修改log4j1的代码基本上就能兼容,不幸的是我的项目继承并深度耦合log4j1,导致需要重新实现。org.apache.log4j原来log4j1的实现对应log4j2的实现在新包org.apache.logging.log4j下面。
快速了解Log4J
Log4J的三个组件:
Logger:日志记录器,负责收集处理日志记录 (如何处理日志)
Appender:日志输出目的地,负责日志的输出 (输出到什么 地方)
Layout:日志格式化,负责对输出的日志格式化(以什么形式展现)
我的升级过程如下:
先下载log4j2的jar,然后解压获取到三个jar包:log4j-api-2.12.1.jar和log4j-core-2.12.1.jar和一个中间桥接包log4j-1.2-api-2.12.1.jar,别引用多了,引用多了也会报错
然后,一定要删除log4j-1.x.jar ,增加log4j2.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO"
packages="org.apache.logging.log4j.core,io.sentry.log4j2">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern=" %d %-5p [%t] %C{2} (%F:%L) - %m%n" />
</Console>
</appenders>
<loggers>
<root level="INFO">
<appender-ref ref="Console" />
</root>
</loggers>
</configuration>
LoggingEvent的timeStamp不给访问了,2.14直接给换成getTimeStamp方法, 2.12直接不提供了,只能直接删除LoggingEvent的使用.
不报错了,运行下,结果控制台没有打印任何东西,debugger发现桥接包中的addAppender是空的
原来中间包里这些不公开的api里面的实现都是空的。只能使用log4j2的实现了去addAppender了
Configuration 配置的根节点,有两个子节点:Appenders和Loggers(表明可以定义多个Appender和Logger)。
该节点有两个配置项
status:用于指定log4j2本身的日志打印级别,日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
monitorinterval:用于指定log4j自动重新配置的监测间隔时间,单位是秒(s),最小是5s。
Appenders 负责将日志输出到目的地(这个目的地可以是控制台,文件,数据库,甚至是邮件),定义输出内容,输出格式,输出方式,日志保存策略等。
log4j2支持的appender种类非常多,完整的appender可通过官方网站进行查询。其中,比较常见的appender有:ConsoleAppender、FileAppender、RandomAccessFileAppender、RollingFileAppender、RollingRandomAccessFileAppender,另外,还提供异步的AsyncAppender,实现异步处理日志事件。
Loggers LogEvent生产的源头,只有定义了logger并引入的appender,appender才会生效。
https://www.docs4dev.com/docs/zh/log4j2/2.x/all/manual-customconfig.html#ConfigurationBuilder
我的配置不是在xml里配置的,而是在程序运行的时候设置的,参考文档如何设置
https://logging.apache.org/log4j/2.x/manual/customconfig.html#AddingToCurrent
appender如果重名了会添加不上去
日志能输出了,之前不显示的日志现在却打印出来了,原来log4j1里的失效了,我再log4j2.xml的loggers下面增加一条
<logger name="org.pentaho" level="INFO"></logger>
去控制org.pentaho包下面的日志级别, logger的输出LEVEL默认还是按包名模糊匹配的
appender内存泄露解决
运行了一段时间发现jvm内存居高不下甚至崩溃了,jmap获取镜像之后发现XmlConfiguration的appenders属性Map中存有大量的appender,debugger跟踪发现add和remove方法居然操作的不是一个config,导致privateConfig.config中还保存了一个appender的引用,要另外把这个也remove才行。
Logger中add和remove不是一个config。
最终找到一个获取cofig及其appender的方法,按key去remove即可。
LoggerContext lc = (LoggerContext)LogManager.getContext(false);
lc.getConfiguration().getAppenders().remove(appender.getName());
log4j1升级log4j2相关推荐
- Spring Boot发布2.6.2、2.5.8:升级log4j2到2.17.0
12月22日,Spring官方发布了Spring Boot 2.5.8(包括46个错误修复.文档改进和依赖项升级)和2.6.2(包括55个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...
- slf4j、jcl、jul、log4j1、log4j2、logback大总结
2019独角兽企业重金招聘Python工程师标准>>> #1 系列目录# 2种日志接口框架,4种日志实现框架 jdk-logging.log4j.logback日志介绍及原理 jcl ...
- Log4j(四)——Log4j1与Log4j2的区别
前言 几乎每个大型应用程序都包含自己的日志或跟踪API.为了符合这一规则,欧盟SEMPRER项目决定编写自己的跟踪API.这是在1996年初.经过无数次的增强.几个版本和大量的工作之后,API演变成了 ...
- springboot升级log4j2,解决漏洞问题
最近log4j2爆出有重大漏洞问题,公司也紧急要求各个项目自己查验,要求将log4j的版本升到安全版本 目前我们使用的是springboot 1.5.9版本,内置log4j2是2.7的版本,虽然整合了 ...
- log4j升级为log4j2(无需改动代码)
log4j升级为log4j2(无需改动代码) 1 .删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x ...
- log4j升级为log4j2(不需要改动代码)
公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和 ...
- logging总结 - log4j2使用流程[归档存储]
2019独角兽企业重金招聘Python工程师标准>>> 第一步:添加log4j-api.log4j-core的支持 <log4j2.version>2.7</log ...
- 本周推荐 | JDK 11 升级实践 和 Java 新特性浅探
推荐语:学习java和jdk的新特性并积极应用,以达到优化系统,降本提效的作用,这是我们作为java研发同学的第一节课.本文从"为什么"起手,谈到"怎么做",最 ...
- Java猿社区—log4j2一站式教程
Java猿社区-log4j2一站式教程 文章目录 Java猿社区-log4j2一站式教程 前言 Log4j2.Log4j.Logback性能压测对比 1000w条消息测试 985M 官方性能测试报告 ...
最新文章
- 量子计算时代更近了,未来可解决大规模计算的科学难题
- vue mixins
- JavaScript调用WebServices
- linux gnome启动命令,如何在Gnome Shell上自动启动程序
- SAP RFC 获取BDC 消息文本的实现
- labview自动生成html,使用LabVIEW实现网页数据提取及交互.pptx
- linux安装mysql5.6rpm_centos6.5 下安装mysql5.6,rpm方式
- (数据挖掘-入门-9)聚类
- Centos7中修改Hostname的方法
- Flink Remote Shuffle 开源:面向流批一体与云原生的 Shuffle 服务
- mysql数字有效位_SQL Server实现数字转字符保留几位有效位数
- qt QDir 枚举类型
- java端口扫描器 demo_java端口扫描器
- 学习java的第十九天,static关键字、隐匿代码块的学习
- 面试题汇总 (HTML与浏览器篇)
- 5月17号软件资讯更新合集....
- 双人矩阵博弈中的纳什均衡
- 打破传统的控制理论之(控制理论+深度学习)
- 固定资产管理流程和技巧
- 数据结构学习笔记------图
热门文章
- 如何搭建一个好的数据指标体系?
- 【干货】某视频app推荐详解.pdf(附下载链接)
- 【报告分享】新基建风口下,零售科技企业如何借势发展.pdf(附下载链接)
- 【报告分享】2020年中国企业直播服务市场研究报告.pdf(附下载链接)
- 蓝桥杯入门训练圆的面积
- android 设置drawable大小,在Android中调整Drawable大小
- 计算机网络对我们思维的影响,计算机网络教学中学生计算思维的培养
- Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)
- LeetCode刷题(19)
- python列表和数组区别java_Python列表与Java数组效率