有什么方法可以动态配置 log4j 记录器。我希望一个类的每个实例都写入不同的文件(基于实例之间唯一的某些属性)。我想从 XML 配置中配置除文件之外的所有内容,然后为每个实例设置文件。
有没有办法使用 log4j 来做到这一点?
最佳答案
好的,根据您的评论,这是我会尝试的。
我想您会在应用程序开始时创建 10 个实例。!?无论如何。
在您的 log4j.xml 中,定义 10 个 name = yourUniqueId 的 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 的方法。
希望对您有所帮助。
关于java - Log4J 动态配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6998323/