在 Web 应用程序中,我使用多线程同时解析多个 XML 文件。
现在,在解析过程的不同阶段,消息被发送到日志中。
当错误发生时,我试图将正确的消息放入日志 - 但是我如何确保如果一个线程由于某种原因失败,那么该特定错误的整个消息列表将发送到一个单独的块中?即不应该混淆不同线程的消息(因为这将使我很难准确理解错误是什么以及哪个线程报告了错误)。
在 Web 应用程序中,我使用多线程同时解析多个 XML 文件。
现在,在解析过程的不同阶段,消息被发送到日志中。
当错误发生时,我试图将正确的消息放入日志 - 但是我如何确保如果一个线程由于某种原因失败,那么该特定错误的整个消息列表将发送到一个单独的块中?即不应该混淆不同线程的消息(因为这将使我很难准确理解错误是什么以及哪个线程报告了错误)。
You should leverage Log4j's MDC or NDC.
在这种情况下,您应该使用 MDC 或 NDC,例如http://veerasundar.com/blog/2009/11/log4j-mdc-mapped-diagnostic-context-example-code/
所以每个线程都会有一个唯一的 id,错误消息将再次写入这个唯一的 id。
在日志文件中搜索特定线程的任何错误时,您可以按此 ID 对行进行 grep。
从设计和性能的角度来看,我认为尝试为每个线程维护一系列行以进行日志记录不是一个好主意。
看看有没有帮助。
myLogContainer=CreateLogContainer();
myLogContainer.push(logMessage);
myLogContainer.push(logMessage);
myLogContainer.push(logMessage);
..
myLogContainer.push(logMessage);
logger.submit(myLogContainer);
myLogContainer=CreateLogContainer(); // ready for next lot of errors