1

我正在使用 logback 实现并创建了一个AsyncAppender以便在线程内使用日志记录。

该线程将类似于监视器:它使用BlockingQueue从其他线程添加的对象,当队列不为空时,并且没有阻塞信号,它会记录队列的内容。同时,队列由几个线程填充。

当线程从协调器获得停止信号时,它们会中断,因此它们不会在队列中添加更多内容。

一旦有阻塞信号(生产者线程已经中断)并且BlockingQueue为空,监视器队列就会中断。

监控线程的日志记录有两个问题:

  1. 生产者中断后,队列变为空,因此监视器线程也立即中断,不显示队列的所有内容,即使它从队列中删除了所有内容。

  2. 显示消息的顺序(在控制台附加程序和文件附加程序中)与它们已插入队列中的顺序不同

我尝试了 3 种不同的方法:在线程内创建一个静态记录器,创建一个非静态记录器,并从创建监视器线程的类中提供一个加载器。

如果我在监视器线程中的 while(true){} 循环中执行所有操作,则会显示所有内容但顺序不正确,而且我必须找出如何中断线程的事实。

我也检查了的情况,MDC但我的问题有点不同:我必须消费生产者的产品并在他们生产时做,加上他们完成后,以防队列中还有东西。

我还检查LoggerContext了线程内部,它的启动是错误的。不应该是真的吗?

关于如何在中断线程之前显示所有内容并以正确的顺序显示它的任何想法都是有价值的。

谢谢。

4

0 回答 0