java - 如何在不同的日志文件中记录多个线程?

标签 java multithreading log4j

我有一个 JAVA 类,它启动具有唯一 ID 的各种线程。 每个线程都应该登录到一个唯一的日志文件中,以 ID.log 命名。

因为我只在运行时获取唯一 ID,所以我必须以编程方式配置 Log4J:

// Get the jobID
myJobID = aJobID;
// Initialize the logger
myLogger = Logger.getLogger(myJobID);
FileAppender myFileAppender;
try
{
    myFileAppender = new FileAppender(new SimpleLayout(), myJobID + ".log", false);
    BasicConfigurator.resetConfiguration();
    BasicConfigurator.configure(myFileAppender);
} catch (IOException e1) {
// TODO Auto-generated catch block
    e1.printStackTrace();
}

现在,如果我按顺序启 Action 业,这就可以正常工作了 - 但是当我同时启动 2 个线程(属于同一类)时,两个日志都会创建,但日志会混淆:第二个线程登录到第一个线程和第二个线程日志。

我如何确保每个实例都是唯一的? 我已经尝试为每个记录器实例指定一个唯一的名称,但它并没有改变任何东西。

最佳答案

Logback 有一个特殊的 appender,叫做 SiftingAppender它为您描述的问题类型提供了一个非常好的解决方案。 SiftingAppender 可用于根据任何运行时属性(包括线程 ID)分离(或筛选)日志记录。

关于java - 如何在不同的日志文件中记录多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355847/

相关文章:

java - 使用 Otto 进行线程间通信 : Can it cause any problems?

c# - C# 和 java 中的 volatile 有什么区别?

java - 记录器不打印 spring mvc 中的堆栈跟踪

java - log4j 在 unix 中记录到 catalina.out 而不是日志文件

java - 如何使用JSP翻页保留参数

java - 如何在 java 中为 ArrayList 中的数据指定排序顺序?

java - 在单个线程上发出通知会唤醒所有等待的线程

java - Log4j线程名称混淆

java - ANTLR4 TokenStream,getText方法

java - 检索 JSON 数据时,String cannot be converted to int 错误