【问题标题】:How to do Java Logging for different Interleaved threads in synchronous way?如何以同步方式为不同的交错线程进行 Java 日志记录?
【发布时间】:2023-03-25 23:42:01
【问题描述】:

我想用例子直接解释我的问题。如果还需要一些其他信息,请添加 cmets。

我有一个小应用程序(SpringBoot+Java),它使用 ThreadPool 来执行几个任务。所以假设我的池中有 2 个线程。现在,log4j 用于日志记录。它将所有线程的日志写入单个文件,并且所有 2 个线程的日志数据都是交错的。

所以每个线程都像 -

[Thread-1][08:15:00] entered into application
[Thread-1][08:15:00] entered method A
[Thread-1][08:15:05] exit method A
[Thread-1][08:15:10] entered method B
[Thread-1][08:15:15] exit method B
[Thread-1][08:15:30] exit from application

[Thread-2][08:15:01] entered into application
[Thread-2][08:15:01] entered method A
[Thread-2][08:15:04] exit method A
[Thread-2][08:15:11] entered method B
[Thread-2][08:15:12] exit method B
[Thread-2][08:15:22] exit from application

但是我的日志文件有这些基于时间戳的条目-

[Thread-1][08:15:00] entered into application
[Thread-1][08:15:00] entered method A
[Thread-2][08:15:01] entered into application
[Thread-2][08:15:01] entered method A
[Thread-2][08:15:04] exit method A
[Thread-1][08:15:05] exit method A
[Thread-1][08:15:10] entered method B
[Thread-2][08:15:11] entered method B
[Thread-2][08:15:12] exit method B
[Thread-2][08:15:14] exit from application
[Thread-1][08:15:15] exit method B
[Thread-1][08:15:30] exit from application

我希望我的日志文件打印线程执行,而不是时间戳。我希望我的日志文件在其他线程启动之前完全打印每个线程。我怎么能做到这一点。

我已经搜索并发现下面的文章是最接近的,但我不想要不同的日志文件- How to log multiple threads in different log files?

我需要将所有日志数据输出到按线程名称分组的单个日志文件中,并按线程开始时间排序。

【问题讨论】:

  • 请不要骂我,只有2个线程,我需要改变我的框架。我在这里以 2 个线程为例,我的真实应用程序有 10 多个线程,如果我阅读日志,调试任何特定情况都会很痛苦。
  • 用一些工具来阅读日志不是更方便吗?一个简单的 unix grep 可以很好地完成工作
  • 让日志输出按线程分组可能既棘手又昂贵——想想看,在达到给定阈值之前,您需要将所有内容都保存在内存中,之后您可以单独编写日志条目。您是否可以考虑使用专用的日志查看器,使您能够按线程进行过滤或分组?有很多不错的日志查看器替代品可以做到这一点。
  • 是的@Jakub,但我想将日志转换成别的东西,在我拥有线程数据之前我无法做到这一点。我可以对 .log 文件执行字符串操作,但是在运行时我不喜欢它。
  • @MickMnemonic 你能推荐一些对我有用的日志查看器工具吗?

标签: java multithreading logging


【解决方案1】:

我猜在控制台附加程序中分离日志不起作用我建议为每个Thread 定义单独的FileAppenders,就像它描述的here 一样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多