首页 > 解决方案 > Java,将日志记录委托给不同的类是一种不好的做法吗?

问题描述

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

public class Foo {

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

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

但是将日志从多个类委托给单个日志服务是否是一种不好的做法,例如

@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");
    }
}

这是可以接受的,还是有一些实际原因偏爱按类记录器的方法?

标签: javaooplogginglog4jslf4j

解决方案


这是可以接受的,还是有一些实际原因偏爱按类记录器的方法?

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

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

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


推荐阅读