从多个线程进行 Java 日志记录的最佳实践?
我希望有一个由管理数据的多个任务生成的诊断日志。这些任务可能位于多个线程中。每个任务都需要将一个元素(可能带有子元素)写入日志;上车,快出。如果这是一个单任务的情况,我会使用XMLStreamWriter,因为它似乎是简单性/功能的最佳匹配,而不必在内存中保存膨胀的XML文档。
但这不是一个单一任务的情况,我不确定如何最好地确保这是“线程安全”,其中“threadsafe”在此应用程序中意味着每个日志元素都应该正确和连续地写入日志(一个接一个,不以任何方式交错)。
有什么建议吗?我有一个模糊的直觉,即要走的方法是使用日志元素队列(每个元素都可以快速生成:我的应用程序正忙于做对性能敏感的实际工作),并且有一个单独的线程来处理日志元素并将其发送到文件,以便日志记录不会中断生产者。
日志记录不一定是 XML,但我确实希望它是结构化的和机器可读的。
编辑:我把“threadsafe”放在引号里。Log4j似乎是显而易见的选择(对我来说是新的,但对社区来说却是旧的),为什么要重新发明轮子......