【问题标题】:How to share common log file among multiple threads in Java如何在 Java 中的多个线程之间共享公共日志文件
【发布时间】:2019-10-09 18:12:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: java multithreading spring-webflux java.util.concurrent


    【解决方案1】:

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

    那么……

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

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

    【讨论】:

    • 线程在同一应用程序和同一物理服务器中运行。就像我们创建了 10 个线程的固定线程池,所有线程都并行运行,并且机器有足够的内核来同时并行运行所有线程。
    • 那么就用Log4J之类的日志框架吧
    • 由于某些限制,我无法使用它。我正在尝试使用 ConcurrentLinkedQueue 从线程收集数据并创建一个专用线程来继续轮询此队列并将数据转储到文件中......让我知道在这种情况下实现并发的其他方法。
    • @Himanshu,你来对了吗?如果是这样,请通过勾选标记将其标记为已解决。发送
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多