我使用Java处理文件,有2个或3个Java组件来处理文件。我的要求是文件必须有一个日志文件,其处理详细信息将记录在相关的日志文件中。
问题是单个文件运行良好,但多个文件却出现问题。
处理多个文件时,记录器正在将file1.txt日志的日志详细信息记录到file2.log而不是file1.log ...
public Class FileProcessComponent1
{
public void process(String fileName)
{
Logger Log = Logg.getLogger1(fileName,this.getClass());
log.info("file1 logging");
}
}
public Class FileProcessComponent2
{
public void process(String fileName)
{
Logger Log = Logg.getLogger1(fileName,this.getClass());
log.info("file1 logging");
}
}
public Class Logg
{
public static Logger getLogger1(String fileName,Class clazz) throws Exception
{
if(fileName == null || "".equals(fileName.trim()))
throw new Exception("File Name or Map for File Name is Null");
fileName = "/home/logs/"+fileName+".log";
Logger logger = Logger.getLogger(clazz.getCanonicalName()+":"+System.nanoTime());
logger.setAdditivity(false);
FileAppender appender = new DailyRollingFileAppender(new PatternLayout("%d{ISO8601}\t%p\t%c\t%m%n"), fileName, "'.'yyyy-MM-dd");
logger.addAppender(appender);
logger.setLevel(Level.DEBUG);
return logger;
}
}
最佳答案
我认为您想为每个要处理的文件创建一个指向unqiue文件的记录器。
尝试这个,
a)在开始处理新文件时,请创建一个新的Logger,其文件名为Loggername。
b)使用filename.log创建Appender并将追加器分配给记录器。
现在,当您尝试获取记录器时,请始终使用getLogger()中的文件名。
处理完文件后,请删除记录器/附加器。 (这个非常重要)