却诚Salong 2022-10-20 10:08 采纳率: 83.3%
浏览 13
已结题

log4j升级到log4j2的对象替换问题

问题遇到的现象和发生背景

之前公司老系统,用的log4j,现在由于安全漏洞原因要升级到log4j2

用代码块功能插入代码,请勿粘贴截图

老系统使用log4j获取logger对象和配置信息代码如下,获取到logger对象之后,可以使用logger.addAppender()来设置appender和level,但是log4j2没有这些方法了:

    this.level = 5;
    this.theLog = Logger.getLogger(UTLogger.class);
    PatternLayout patternLayout = new PatternLayout("[%d{HH:mm:ss:SSS}] %m%n");
    ConsoleAppender consoleAppender = new ConsoleAppender((Layout)patternLayout);
    this.theLog.addAppender((Appender)consoleAppender);
    this.theLog.setLevel(Level.DEBUG);

log4j2我目前的代码
    final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
    final org.apache.logging.log4j.core.config.Configuration config = ctx.getConfiguration();
    PatternLayout layout= PatternLayout.createLayout("[%d{HH:mm:ss:SSS}] %m%n", null, config,null, Charset.forName("UTF-8"),true,false,null,null);
    Appender appender =ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "false", "true");
    appender.start();

    LoggerConfig root=new LoggerConfig();
    root.setLevel(Level.DEBUG);
    root.addAppender(appender, null, null);

运行结果及报错内容

log4j和log4j2的获取logger对象区别为,一个是Logger.getLogger(),一个是LogManager.getLogger(),获取到logger对象之后log4j可以直接用logger.addAppender()和setLevel()方法来定制化每一个logger的配置,但是log4j2没有这些方法,如何来定制化每个logger的配置。

我想要达到的结果

由于系统是20年前的老系统,不是web项目,没有xml和yml等配置说法,用纯java代码实现log4j2的功能,感谢帮忙看看。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月28日
    • 创建了问题 10月20日

    悬赏问题

    • ¥20 docker里部署springboot项目,访问不到扬声器
    • ¥15 netty整合springboot之后自动重连失效
    • ¥15 悬赏!微信开发者工具报错,求帮改
    • ¥20 wireshark抓不到vlan
    • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
    • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
    • ¥15 stata安慰剂检验作图但是真实值不出现在图上
    • ¥15 c程序不知道为什么得不到结果
    • ¥40 复杂的限制性的商函数处理
    • ¥15 程序不包含适用于入口点的静态Main方法