在具有线程ID的java类中进行日志是否可以?

时间:2013-11-15 08:47:26

标签: java logging log4j

当我们将日志添加到java类(使用log4j)时,是否可以使用该日志消息添加线程ID?这是一种不好的做法吗?我的想法是添加这个线程ID;一旦我们检查多线程应用程序的日志文件,就很难使用日志找出正确的流。 (例如,说认证流程)。有没有更好的方法,而不是记录线程ID?

4 个答案:

答案 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,那么我建议两件事:

  • 使用SLF4J作为日志记录立面
  • 使用logback作为日志记录实现,采用谨慎模式
  

在谨慎模式下,FileAppender将安全地写入指定的
  文件,即使存在其他运行的FileAppender实例   不同的JVM,可能在不同的主机上运行。

请参阅:http://logback.qos.ch/manual/appenders.html#SiftingAppender