在 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/