Java 在客户机-服务器程序中使用logback

Java 在客户机-服务器程序中使用logback,java,multithreading,logging,slf4j,logback,Java,Multithreading,Logging,Slf4j,Logback,我需要在客户机-服务器程序中使用logback,对于到达服务器的每个请求,它将创建一个新的服务,该服务将在单独的线程中运行。我需要记录服务执行期间发生的操作。但我不想为每个服务线程生成单独的记录器对象。我知道一个解决方案是将logger对象设置为静态。所以它不会每次都被引用,但是对于这类问题有没有标准的解决方案。下面是我的源代码中的一些代码片段: 为每个请求创建单独服务线程的服务器类: 1:特定于服务器类的记录器 2:对于每个进入服务器的请求,我们都会生成一个新线程(服务类的新实例),但问题是

我需要在客户机-服务器程序中使用logback,对于到达服务器的每个请求,它将创建一个新的服务,该服务将在单独的线程中运行。我需要记录服务执行期间发生的操作。但我不想为每个服务线程生成单独的记录器对象。我知道一个解决方案是将logger对象设置为静态。所以它不会每次都被引用,但是对于这类问题有没有标准的解决方案。下面是我的源代码中的一些代码片段:

为每个请求创建单独服务线程的服务器类:

1:特定于服务器类的记录器

2:对于每个进入服务器的请求,我们都会生成一个新线程(服务类的新实例),但问题是我们不希望每个服务实例都有一个记录器实例(我想这是一个糟糕的做法!)

这是服务类:

*:logger是静态定义的,因此不会为每个服务类实例实例化:

我知道一个解决方案是将logger对象设置为静态,这样就不会每次都实例化它,但是对于这种问题有没有标准的解决方案

这就是我在应用程序中所做的。它工作得很好

我的许多课程都将此作为第一行:

public class SomeClass {
    private static final Logger LOG = LoggerFactory.getLogger(SomeClass.class);

    // the rest of the class
}

logback的设计目标之一是审核和调试复杂的分布式应用程序。大多数现实世界的分布式系统需要同时处理多个客户机。在这种系统的典型多线程实现中,不同的线程将处理不同的客户端。区分一个客户机的日志输出和另一个客户机的日志输出的一种可能但有点不推荐的方法包括为每个客户机实例化一个新的和单独的记录器。这种技术促进了伐木工人的激增,并可能增加他们的管理开销


阅读整个链接,它在解释MDC方面比我以前做得更好。

如果您发布代码而不是屏幕截图,我们将更容易为您提供帮助,这样我们就可以复制/粘贴编辑到我们的答案中,等等。我也使用此解决方案(我的意思是定义静态记录器)我也使用了MDC(问题中显示了这一点)但我的问题是为什么要使用final关键字。@user3593084,因为它始终是相同的
记录器
,在创建类时实例化。@user3593084当然可以,但很抱歉再次询问,但是static会使此属性在所有类实例中唯一,而且我们正在使用相同的参数初始化类实例(在本例中是SomeClass.class)所以我们不需要最后的关键字