log4j 在java类中使用线程ID进行日志记录可以吗?

pobjuy32  于 2022-11-06  发布在  Java
关注(0)|答案(4)|浏览(220)

当我们在java类中添加日志时(使用log4j),在日志消息中添加线程id是否合适?这是一个不好的做法吗?我的想法是添加这个线程id;一旦我们检查了一个多线程应用程序的日志文件,就很难使用日志找到正确的流。(举个例子,比如身份验证流)。有没有比记录线程id更好的方法?

ogsagwnx

ogsagwnx1#

Log4j已经支持在其pattern layout中使用t占位符的线程名称。因此,这是一个受支持的特性,如果您发现它有用,应该使用它。这样您就不需要手动传递线程名称。但是,它不使用线程ID。因此,您应该为您的线程给予有意义的名称。这应该是首选的,因为它比普通线程id更能指示应用程序中正在发生的事情。

ltskdhd1

ltskdhd12#

如果是线程id,请参考this answer
但是如果你只需要线程名,你可以使用t模式配置,请参考here

r8uurelv

r8uurelv3#

如果您使用的是Java Logger API - LogRecord具有方法getThreadID(),并且可以配置为记录日志。
对于log4j,没有可用的ThreadId方法,记录它也无妨。如果你的类继承自Thread,你可以使用getName和setName方法来命名每个线程。否则,你可以只在MyTask中添加一个名称字段,并在构造函数中初始化它。

qco9c6ql

qco9c6ql4#

Logback有一个名为SiftingAppender的特殊附加器,它为您描述的问题类型提供了一个非常好的解决方案。SiftingAppender可用于根据任何运行时属性(包括线程ID)来分离(或筛选)日志记录
如果您关心的是几个JVM写入同一个FileAppender,那么我建议您做两件事:

  • 使用SLF4J作为日志外观
  • 使用logback作为日志记录实现,在谨慎模式下

在谨慎模式下,FileAppender将安全地写入指定的
即使存在运行在不同JVM(可能运行在不同主机上)中的其他FileAppender示例。
请参阅:http://logback.qos.ch/manual/appenders.html#SiftingAppender

相关问题