有没有办法动态配置log4j记录器。我希望每个类的实例都写入一个不同的文件(基于一些在实例之间唯一的属性)。我想配置除XML配置文件以外的所有内容,然后为每个实例配置文件。
有没有办法用log4j做到这一点?
答案 0 :(得分:7)
好的,从您的评论中,我会尝试。
我想你会在你的应用程序开始时创建你的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的方法。
希望有所帮助。