Java Log4J动态配置
是否有任何方法可以动态配置log4j记录器。我希望一个类的每个实例都写入不同的文件(例如,基于实例之间唯一的某个属性)。我想从XML配置中配置除文件之外的所有内容,然后为每个实例设置文件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有什么方法可以做到这一点吗?好的,根据您的评论,我将尝试一下 我想你会在应用程序开始时创建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);
}
}