【问题标题】:Load a log4j properties file and change programatically加载 log4j 属性文件并以编程方式更改
【发布时间】:2016-10-03 12:21:34
【问题描述】:

我有一个场景,我想初始化多个 log4j 记录器以使用标准 log4j.properties 文件作为属性的基础写入它们自己的文件。然后我想修改我的代码中的属性来设置记录器。在代码中,我一直在这样设置我的 Logger:

PropertyConfigurator.configure(log4jpropertiespath);

但是我需要能够设置文件附加程序和一些属性,如下所示。特别想设置 Additivity 以确保记录器实例保留自己的日志信息,无论创建了多少包和初始化了多少记录器。

SimpleLayout layout = new SimpleLayout();
FileAppender appender = new FileAppender(layout, logFileName, true);    
this.logger.setAdditivity(false);
this.logger.addAppender(appender);

感谢任何指导。

【问题讨论】:

    标签: java logging log4j


    【解决方案1】:

    我仍然认为这不是一个好主意(拥有任意数量的日志文件等),但您可以通过包装 Logger.getLogger 方法来做到这一点,就像这样

    public static Logger getPackageLogger(String packageName) {
        Logger logger = Logger.getLogger(packageName);
        if (logger.getAppender("myPackageAppender") == null) {
            String logFileName = packageName + ".log"; // or something
            SimpleLayout layout = new SimpleLayout();
            FileAppender appender = new FileAppender(
                layout, logFileName, true);    
            appender.setName("myPackageAppender");
            logger.setAdditivity(false);
            logger.addAppender(appender);
        }
        return logger;
    }
    

    这可以被多次调用,并且应该只配置每个不同的(包)记录器对象一次。

    【讨论】:

    • 我最终更改了实现以使用更简单的日志记录系统。谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2021-09-03
    • 2016-05-22
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多