java - 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");
}
}
这是可以接受的,还是有一些实际原因偏爱按类记录器的方法?
解决方案
这是可以接受的,还是有一些实际原因偏爱按类记录器的方法?
1) 这不是一个好习惯,因为您可能希望将日志记录配置为在某些级别记录某些包和其他包的其他级别。
如果所有日志都是从同一个类写入的,则您不能这样做,因为您的所有应用程序日志都将从同一个确切的包中写入。
2)使用的方法产生读取间接。所以你的梨必须深入LoggingService
了解日志记录操作是如何实际完成的。
3) 日志 API 提供多种日志方式。
为了符合标准日志记录(例如 SLF4J),您应该在您的LoggingService
类中提供完全相同的方法,并且您还应该根据日志记录的标准更新您的类。它代表了您想为自己承担的一项重要职责。
推荐阅读
- c++ - BufferView 中的字节偏移量大于字节长度
- node.js - 将 SASS 添加到 React 项目会阻碍 Yarn Start
- c++ - 删除了 'simple_vector::simple_vector(int)' 的定义
- reactjs - Next.js - 如何动态设置头部标签
- html - 删除 th 和 td 元素之间的多余空间
- swift - swift tableview 将 reloadData 更改为 insertRows
- laravel - 使用 Axios 的 Laravel API 没有响应数据
- reactjs - 为什么这个打字稿反应组件中预期道具的对象结构中有分号?
- r - 是否有任何 r 函数可用于将两个 geom_text 添加在一起并进行不同的着色?
- c# - ASP.NET Core 错误开发模式仅在区域