当我们将日志添加到java类(使用log4j)时,是否可以使用该日志消息添加线程ID?这是一种不好的做法吗?我的想法是添加这个线程ID;一旦我们检查多线程应用程序的日志文件,就很难使用日志找出正确的流。 (例如,说认证流程)。有没有更好的方法,而不是记录线程ID?
答案 0 :(得分:3)
Log4j已在其pattern layout中使用t
占位符支持胎面名称。因此,如果您发现它有用,则应使用此功能。这种方式不需要手动传递线程名称。但是它没有使用线程ID。所以你应该为你的线程提供有意义的名字。这应该是首选,因为它更能说明应用程序中发生的事情,而不仅仅是普通的线程ID。
答案 1 :(得分:0)
如果是主题ID,请参阅this answer
但是,如果您只需要线程名称,则可以使用t
模式配置,请参阅here。
答案 2 :(得分:0)
如果您使用的是Java Logger API,则LogRecord具有getThreadID()方法,并且可以配置为记录。
对于log4j,没有可用的ThreadId方法,并且记录它没有任何危害。 如果您的类继承自Thread,则可以使用方法getName和setName来命名每个线程。否则你可以在MyTask中添加一个名称字段,并在构造函数中初始化它并使用更合理的线程名称而不是ID。
答案 3 :(得分:0)
Logback有一个名为 SiftingAppender 的特殊附加程序,它为您描述的问题类型提供了一个非常好的解决方案。 SiftingAppender可用于根据任何运行时属性分离(或筛选)日志记录,包括线程标识
如果您关注的是几个JVM写入同一个FileAppender,那么我建议两件事:
在谨慎模式下,FileAppender将安全地写入指定的
文件,即使存在其他运行的FileAppender实例 不同的JVM,可能在不同的主机上运行。
请参阅:http://logback.qos.ch/manual/appenders.html#SiftingAppender