繁体   English   中英

Log4J动态配置

[英]Log4J dynamic configuration

有没有办法动态配置log4j记录器。 我希望每个类的实例都写入一个不同的文件(基于一些在实例之间唯一的属性)。 我想配置除XML配置文件以外的所有内容,然后为每个实例配置文件。

有没有办法用log4j做到这一点?

好的,从你的评论,我在这里尝试。

我想你会在你的应用程序开始时创建你的10个实例。 无论如何。

在你的log4j.xml中,使用name = yourUniqueId定义10 appender(这个唯一的id将被硬编码)

将这些appender写入yourUniqueid.log

<logger name="yourUniqueId" additivity="false">
    <level value="INFO" />
    <appender-ref ref="fileAppender" />
</logger>

<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/path/yourfile.log"/>

    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/>
    </layout>
</appender>

然后在对象构造函数中,使用对象唯一ID实例化正确的Logger。

像这样的东西:

public MyClassContructor(){
     String uniqueId = getMyUniqueIdFromSomewhere();
     logger = Logger.getLogger(uniqueId);
} 

我想你不想乱用log4j.xml,那么你必须使用log4j API并根据你的唯一id创建自己的appender

像这样的东西:

public class YourClass{
Logger logger = Logger.getLogger(YourClass.class);
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;

public YourClass() {
    try {
        appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false);
        logger.addAppender(appender);

        logger.setLevel((Level) Level.DEBUG);

    }
    catch(IOException e) {
        e.printStackTrace();
        logger.error("Printing ERROR Statements",e);
    }
}

这样,YourClass的每个实例都会写入不同的日志文件。 所有你需要做的就是想一下在调用构造函数时获取这个uniqueId的方法。

希望它有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM