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

如何在Java中多线程间共享公共日志文件,java,multithreading,spring-webflux,java.util.concurrent,Java,Multithreading,Spring Webflux,Java.util.concurrent,我们可以在多个线程之间共享同一个日志文件吗 先在Deque中转储消息(如并发收集),然后定期将数据从Deque转储到日志文件,这是一个好主意 请共享任何示例/指针以获得最佳性能。假设线程指的是在同一台机器上或分布式环境中运行的应用程序/程序,而不是同一应用程序中的多个线程 然后 如果您使用Log4J作为日志框架,则可以通过SocketAppender(请参阅)实现日志记录。然后,您的各种应用程序可以连接到您编写的单独的“日志”服务,以将所有日志合并到单个文件中 另一种选择是让您的所有应用程序注

我们可以在多个线程之间共享同一个日志文件吗

先在Deque中转储消息(如并发收集),然后定期将数据从Deque转储到日志文件,这是一个好主意


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

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

然后

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

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


线程在同一应用程序和同一物理服务器中运行。就像我们创建了10个线程的fixedThreadpool,所有线程都并行运行,机器有足够的内核同时并行运行所有线程。然后只需使用日志框架,比如我不能使用它,因为有一些限制。我正在尝试使用ConcurrentLinkedQueue从线程收集数据,并创建一个专用线程来持续轮询此队列并将数据转储到文件中。。。让我知道在这种情况下实现并发的其他方法。@Himanshu,你来对了吗?如果是,请勾选勾号,将其标记为已解决。德克萨斯州