4
有什么办法动态配置log4j记录器。我希望每个类的实例写入不同的文件(基于说一些实例之间唯一的属性)。我想配置除XML配置文件之外的所有内容,然后为每个实例设置文件。Log4J动态配置
有没有办法使用log4j来做到这一点?
有什么办法动态配置log4j记录器。我希望每个类的实例写入不同的文件(基于说一些实例之间唯一的属性)。我想配置除XML配置文件之外的所有内容,然后为每个实例设置文件。Log4J动态配置
有没有办法使用log4j来做到这一点?
好的,从您的评论,这里我会尝试。
我想你会在你的应用程序开始时创建你的10个实例。无论如何。
在你的log4j.xml,定义10的appender与NAME = yourUniqueId(这唯一的ID将被排序的硬编码)
让这些附加目的地写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>
然后在你的对象构造函数,使用对象唯一标识实例化正确的Logger。
类似的东西:
public MyClassContructor(){
String uniqueId = getMyUniqueIdFromSomewhere();
logger = Logger.getLogger(uniqueId);
}
我想你不想用的log4j.xml周围很乱,那么你将不得不使用log4j的API,并创建自己的appender根据您的独特ID
事情是这样的:
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成为可能。
希望它有帮助。
不知道我明白,但我想你想为每个班级创建一个Appender。您必须在每个类中使用类的名称实例化记录器。我希望你在你的项目中没有太多的课程,因为你最终会得到很多.log – Cygnusx1
我只想为一个班级提供这个,它会有几个实例(可以说最多10个)。并且每个实例都有一个唯一的ID。我希望每个实例都写入,让我们说文件ID.log – user182945