Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4J动态配置_Java_Logging_Dynamic_Log4j - Fatal编程技术网

Java Log4J动态配置

Java Log4J动态配置,java,logging,dynamic,log4j,Java,Logging,Dynamic,Log4j,是否有任何方法可以动态配置log4j记录器。我希望一个类的每个实例都写入不同的文件(例如,基于实例之间唯一的某个属性)。我想从XML配置中配置除文件之外的所有内容,然后为每个实例设置文件 使用log4j有什么方法可以做到这一点吗?好的,根据您的评论,我将尝试一下 我想你会在应用程序开始时创建10个实例。!?无论如何 在log4j.xml中,用name=yourUniqueId定义10个appender(这个唯一的id将被硬编码) 让这些appender写入您的uniqueid.log <l

是否有任何方法可以动态配置log4j记录器。我希望一个类的每个实例都写入不同的文件(例如,基于实例之间唯一的某个属性)。我想从XML配置中配置除文件之外的所有内容,然后为每个实例设置文件


使用log4j有什么方法可以做到这一点吗?

好的,根据您的评论,我将尝试一下

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

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

让这些appender写入您的uniqueid.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>
我认为您不想乱弄log4j.xml,那么您就必须使用log4japi并基于您的唯一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);
    }
}
这样,类的每个实例都会写入不同的日志文件。你所要做的就是想办法在调用构造函数时获得这个唯一ID


希望有帮助。

我不太清楚,但我认为您希望为每个类创建一个Appender。您必须使用类的名称在每个类中实例化记录器。我希望你的项目中不要有太多的类,因为你最终会得到很多。logI只希望这个类有几个实例(最多10个)。每个实例都有一个唯一的ID。我希望每个实例都写一个文件ID.log
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);
    }
}