java日志记录为轮询系统中的每个线程写入多次
java中的线程轮询系统。我还分别为每个线程记录日志。但是fileappender的实例没有使用线程关闭。因此,在线程到来的下一次轮询中,有两个fileappender实例,因此它在下一次轮询中记录了两次日志,并再次记录了三次日志,以此类推 这是我的密码java日志记录为轮询系统中的每个线程写入多次,java,multithreading,logging,Java,Multithreading,Logging,java中的线程轮询系统。我还分别为每个线程记录日志。但是fileappender的实例没有使用线程关闭。因此,在线程到来的下一次轮询中,有两个fileappender实例,因此它在下一次轮询中记录了两次日志,并再次记录了三次日志,以此类推 这是我的密码 public void run() { String parent = "Autobrs", name = "Pool"; name = name + poolId; String loggerName = paren
public void run()
{
String parent = "Autobrs", name = "Pool";
name = name + poolId;
String loggerName = parent + "." + name;
Logger log = Logger.getLogger(loggerName);
DailyRollingFileAppender fileApp = new DailyRollingFileAppender();
fileApp.setName("Autobrs." + loggerName + "_FileAppender");
fileApp.setFile("c:\\java\\"+ name+".log");
fileApp.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} (%0F:%L) %3x - %m%n"));
fileApp.setThreshold(Level.toLevel("debug"));
fileApp.setAppend(true);
fileApp.activateOptions();
log.addAppender(fileApp);
}
我不知道该怎么处理。
请帮助..由于FileAppender从Writeappender继承了
close()
,请使用
这里可能有内存泄漏。getLogger()将保留对其创建的所有记录器的引用
最佳做法是由main
线程配置一个文件追加器,每个run()可以在其消息中记录poolId
(或任何内容)
让多个线程写入一个公共记录器和附加器。看起来您正在尝试使用poolId来分离日志。我想每个线程都是一样的,我以前已经试过了。日志记录良好(一次性)。但它显示了一个错误。“log4j:尝试附加到名为[Autobrs.Autobrs.Pool3448_FileAppender]的已关闭附加程序时出错。”
fileApp.close()
String parent = "Autobrs", name = "Pool";
name = name + poolId;
String loggerName = parent + "." + name;
Logger log = Logger.getLogger(loggerName);