Java,将日志记录委托(delegate)给不同的类是一种不好的做法吗?

标签 java oop logging log4j slf4j

在 Java 日志记录中,通常会获取每个类的记录器实例

public class Foo {

    public static final Logger logger = LoggerFactory.getLogger(Foo.class);

    public void doSomething() {
        logger.info("doSomething called");
    }
}

但是,例如,将多个类的日志记录委托(delegate)给单个日志记录服务是一种不好的做法

@Stateless
public class LoggingService {

    public static final Logger logger = LoggerFactory.getLogger(LoggerService.class);

    public void info(String context, String messsage) {
        logger.info(context + message);
    }
}

@Stateless
public class Foo {

    @EJB
    LoggingService logger;

    public void doSomething() {
        logger.info("Foo", "doSomething called");
    }
}

@Stateless
public class Bar {

    @EJB
    LoggingService logger;

    public void doSomething() {
        logger.info("Bar", "doSomething called");
    }
}

这是可以接受的,还是有一些实际原因支持每类记录器方法?

最佳答案

Is this acceptable, or is there some practical reason the logger per class approach is favored?

1) 这不是一个好的做法,因为您可能希望配置日志记录以在某些级别记录某些包,在其他级别记录其他包。
如果所有日志都是从同一个类写入的,则您不能这样做,因为所有应用日志都将从同一个包写入。

2) 所使用的方法产生读取间接。因此,您必须深入研究 LoggingService 以了解日志记录操作实际上是如何完成的。

3) 日志API提供多种日志方式。
为了符合标准日志记录(例如 SLF4J),您应该在 LoggingService 类中提供完全相同的方法,并且还应该根据日志记录方面的标准更新您的类。它代表了您想要为自己腾出的一项重要职责。

关于Java,将日志记录委托(delegate)给不同的类是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51581920/

相关文章:

java - 使用 Spring 根据实例化层次结构注入(inject)类的不同实例

java - gwtent 反射 java

java - 处理图像时内存不足异常。在java中

language-agnostic - 对接口(interface)编程,通用性有多通用?

python - 导入 fbprophet 后 Flask 出现重复日志

c# - Nlog - 为日志文件生成 header 部分

java - 如何在Android中进行Json解析

java - 第二种方法扫描仪不起作用

c# - 为了避免将来的验证而返回一个 String 的包装器是否有意义?

php - 使用 for 循环访问类变量