【发布时间】: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