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

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日