1. 删除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
  2. 增加log4j2.xml配置文件
  3. 完成前面两步基本就可以了,如果仍然有不兼容的部分则修改代码使用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相关推荐

  1. 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个错误修复.文档改进和依赖项升级). 这两个版本均为缺陷修复版本 ...

  2. slf4j、jcl、jul、log4j1、log4j2、logback大总结

    2019独角兽企业重金招聘Python工程师标准>>> #1 系列目录# 2种日志接口框架,4种日志实现框架 jdk-logging.log4j.logback日志介绍及原理 jcl ...

  3. Log4j(四)——Log4j1与Log4j2的区别

    前言 几乎每个大型应用程序都包含自己的日志或跟踪API.为了符合这一规则,欧盟SEMPRER项目决定编写自己的跟踪API.这是在1996年初.经过无数次的增强.几个版本和大量的工作之后,API演变成了 ...

  4. springboot升级log4j2,解决漏洞问题

    最近log4j2爆出有重大漏洞问题,公司也紧急要求各个项目自己查验,要求将log4j的版本升到安全版本 目前我们使用的是springboot 1.5.9版本,内置log4j2是2.7的版本,虽然整合了 ...

  5. log4j升级为log4j2(无需改动代码)

    log4j升级为log4j2(无需改动代码) 1 .删掉项目中存在的Log4j1.x的jar包,添加log4j2的jar包; 2.添加log4j和log4j2的连接包log4j-1.2-api-2.x ...

  6. log4j升级为log4j2(不需要改动代码)

    公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和 ...

  7. logging总结 - log4j2使用流程[归档存储]

    2019独角兽企业重金招聘Python工程师标准>>> 第一步:添加log4j-api.log4j-core的支持 <log4j2.version>2.7</log ...

  8. 本周推荐 | JDK 11 升级实践 和 Java 新特性浅探

    推荐语:学习java和jdk的新特性并积极应用,以达到优化系统,降本提效的作用,这是我们作为java研发同学的第一节课.本文从"为什么"起手,谈到"怎么做",最 ...

  9. Java猿社区—log4j2一站式教程

    Java猿社区-log4j2一站式教程 文章目录 Java猿社区-log4j2一站式教程 前言 Log4j2.Log4j.Logback性能压测对比 1000w条消息测试 985M 官方性能测试报告 ...

最新文章

  1. 量子计算时代更近了,未来可解决大规模计算的科学难题
  2. vue mixins
  3. JavaScript调用WebServices
  4. linux gnome启动命令,如何在Gnome Shell上自动启动程序
  5. SAP RFC 获取BDC 消息文本的实现
  6. labview自动生成html,使用LabVIEW实现网页数据提取及交互.pptx
  7. linux安装mysql5.6rpm_centos6.5 下安装mysql5.6,rpm方式
  8. (数据挖掘-入门-9)聚类
  9. Centos7中修改Hostname的方法
  10. Flink Remote Shuffle 开源:面向流批一体与云原生的 Shuffle 服务
  11. mysql数字有效位_SQL Server实现数字转字符保留几位有效位数
  12. qt QDir 枚举类型
  13. java端口扫描器 demo_java端口扫描器
  14. 学习java的第十九天,static关键字、隐匿代码块的学习
  15. 面试题汇总 (HTML与浏览器篇)
  16. 5月17号软件资讯更新合集....
  17. 双人矩阵博弈中的纳什均衡
  18. 打破传统的控制理论之(控制理论+深度学习)
  19. 固定资产管理流程和技巧
  20. 数据结构学习笔记------图

热门文章

  1. 如何搭建一个好的数据指标体系?
  2. 【干货】某视频app推荐详解.pdf(附下载链接)
  3. 【报告分享】新基建风口下,零售科技企业如何借势发展.pdf(附下载链接)
  4. 【报告分享】2020年中国企业直播服务市场研究报告.pdf(附下载链接)
  5. 蓝桥杯入门训练圆的面积
  6. android 设置drawable大小,在Android中调整Drawable大小
  7. 计算机网络对我们思维的影响,计算机网络教学中学生计算思维的培养
  8. Leetcode每日一题:110.balanced-binary-tree(平衡二叉树)
  9. LeetCode刷题(19)
  10. python列表和数组区别java_Python列表与Java数组效率