【发布时间】:2015-01-30 22:30:20
【问题描述】:
我有一个应用程序可以完成一些工作并生成日志。 我使用 org.apache.log4j.Logger 我在课堂上写道:
static final Logger logger = Logger.getLogger(App.class);
在 main 我从文件中加载属性
PropertyConfigurator.configure("log4j.properties");
并写入输出
logger.debug("Hello World!");
一切正常(log4j.properties 的内容见下文)
现在我想重写一个将生成不同线程的应用程序(它们将被调度作业并且可能并行执行)。 据我了解,每个线程都必须创建自己的记录器。像这样的:
public class TestJob implements Job {
private Logger thread_logger = null;
//...
}
现在(在“做线程”方法中)我想为这个记录器设置属性。
thread_logger = Logger.getLogger(TestJob.class);
//and assign the configuration, but how?
PropertyConfigurator.configure("mythreadname.log4j.properties"); //?
原始记录器有一个 log4j.properies 文件(此处声明了输出文件):
# Root logger option
log4j.rootLogger=DEBUG, file, stdout
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.append=false
log4j.appender.file.File=.\\streambackup.execution.log
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Duplicate log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
是否有可能(以及如何做到这一点) - 为每个线程链接一个 .property 文件(具有不同的输出文件)? IE。我想这样做
main thread writes log to log\logmain.txt
thread1 writes log to log\trh1\log1.txt
thread2 writes log to log\trh2\log2.txt
...
threadN writes log to log\trhN\logN.txt
//I don't now the count of treads...
PropertyConfigurator 好像对所有线程都是全局的?
【问题讨论】:
标签: java multithreading logging log4j