如何在 Java 中的多个线程之间共享公共日志文件

How to share common log file among multiple threads in Java

我们可以在多个读取和写入日志文件的线程之间共享同一个日志文件吗?

像并发收集一样先将消息转储到双端队列中,然后定期从双端队列中转储数据到日志文件是个好主意吗?

请分享任何示例/指针以获得最佳性能。

假设您指的是同一台机器上或分布式环境中的应用程序/程序 运行,而不是同一应用程序中的多个线程。

那么……

  • 如果您使用 Log4J 作为您的日志记录框架,您可以通过 SocketAppender 实现您的日志记录(参见 Log4J appenders)。然后您的各种应用程序可以连接到您编写的单独的 "logging" 服务,以将所有日志合并到一个文件中。

  • 另一种选择是让您的所有应用程序在特定队列(类似于 RabbitMQ)上注册为生产者,其中日志行作为消息发布。然后你可以再次拥有一个单独的消费者,它消费消息并将它们写入你的日志。