Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java日志记录为轮询系统中的每个线程写入多次_Java_Multithreading_Logging - Fatal编程技术网

java日志记录为轮询系统中的每个线程写入多次

java日志记录为轮询系统中的每个线程写入多次,java,multithreading,logging,Java,Multithreading,Logging,java中的线程轮询系统。我还分别为每个线程记录日志。但是fileappender的实例没有使用线程关闭。因此,在线程到来的下一次轮询中,有两个fileappender实例,因此它在下一次轮询中记录了两次日志,并再次记录了三次日志,以此类推 这是我的密码 public void run() { String parent = "Autobrs", name = "Pool"; name = name + poolId; String loggerName = paren

java中的线程轮询系统。我还分别为每个线程记录日志。但是fileappender的实例没有使用线程关闭。因此,在线程到来的下一次轮询中,有两个fileappender实例,因此它在下一次轮询中记录了两次日志,并再次记录了三次日志,以此类推

这是我的密码

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);