Java,将日志记录委派给其他类是不好的做法吗?

时间:2018-07-29 15:40:51

标签: 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");
    }
}

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

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

这是可以接受的,还是出于某些实际原因而偏爱基于类的记录器?

1 个答案:

答案 0 :(得分:1)

  

这是否可以接受,或者记录仪是否出于某些实际原因   赞成采用班级教学法吗?

1)这不是一个好习惯,因为您可能希望将日志记录配置为在某些级别记录某些软件包,而在其他级别记录其他软件包。
如果所有日志均来自同一类,则您将无法执行此操作,因为所有应用日志都将从同一包中写入。

2)所使用的方法会产生间接读取。因此,您的梨子必须深入LoggingService才能知道日志操作是如何实际完成的。

3)记录API提供了多种记录方式。
为了与标准日志记录(例如SLF4J)兼容,您应该在LoggingService类中提供相同的确切方法,并且还应该根据标准在日志记录方面更新您的类。这是您想为自己保留的一项重要职责。