【发布时间】:2013-02-13 02:43:59
【问题描述】:
我正在开发一个以多线程方式处理多个文件的应用程序。 分析是通过为每个应该分析的文件启动一个线程来完成的,然后执行一系列步骤(在不同的类中),这些步骤都会产生某种形式的日志记录输出。
我想为我分析的每个文件都有专用的日志文件,其中只包含该文件的消息。我现在使用的代码是在程序还是单线程的时候编写的:
PatternLayout layout = new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %C{1} %x - %m%n");
if(Config.CREATE_SEPERATE_LOG)
{
FileAppender appender;
try {
String path = (Config.LOGFILE_PATH!=null)?Config.LOGFILE_PATH:filename;
appender = new FileAppender(layout,path);
appender.setErrorHandler(new FallbackErrorHandler());
appender.setName("Dedicated Appender");
org.apache.log4j.Logger.getRootLogger().addAppender(appender);
} catch (IOException e) {
org.apache.log4j.Logger.getLogger(Config.class).warn("Failed to create a dedicated log "+filename, e);
}
}
这基本上创建了一个额外的附加程序,该附加程序为正在分析的文件写入专用日志文件。虽然它可以在应用程序是单线程时工作,但它会变得一团糟。
如何更改我的设置,以便让每个班级参与分析某个文件,将其记录到该文件的特定日志文件中。
【问题讨论】:
-
您是否尝试过使用从您正在阅读的文件中生成的某种变量来启动 FileWriter(假设您正在使用它)流目标?
-
不确定我明白你的意思。你会解决 log4j 并只使用普通的旧 java FileWriter 吗?
标签: java multithreading log4j