在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");
}
}
这是可以接受的,还是出于某些实际原因而偏爱基于类的记录器?
答案 0 :(得分:1)
这是否可以接受,或者记录仪是否出于某些实际原因 赞成采用班级教学法吗?
1)这不是一个好习惯,因为您可能希望将日志记录配置为在某些级别记录某些软件包,而在其他级别记录其他软件包。
如果所有日志均来自同一类,则您将无法执行此操作,因为所有应用日志都将从同一包中写入。
2)所使用的方法会产生间接读取。因此,您的梨子必须深入LoggingService
才能知道日志操作是如何实际完成的。
3)记录API提供了多种记录方式。
为了与标准日志记录(例如SLF4J)兼容,您应该在LoggingService
类中提供相同的确切方法,并且还应该根据标准在日志记录方面更新您的类。这是您想为自己保留的一项重要职责。