Java 如何设置每个实例和每个包层次结构的日志级别
我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象的组合表示。 每个设备都有一个ID,与设备相关的每个对象都知道其ID 在配置日志记录时,除了设置每个包层次结构的日志级别外,我还希望能够设置每个设备的日志级别-也就是说,与一个设备相关的所有实例都应该设置为调试级别Java 如何设置每个实例和每个包层次结构的日志级别,java,logging,log4j,slf4j,Java,Logging,Log4j,Slf4j,我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象的组合表示。 每个设备都有一个ID,与设备相关的每个对象都知道其ID 在配置日志记录时,除了设置每个包层次结构的日志级别外,我还希望能够设置每个设备的日志级别-也就是说,与一个设备相关的所有实例都应该设置为调试级别 log4j.logger.mydevice123=DEBUG 如何通过包层次结构和实例ID设置日志级别? 到目前为止,我的想法是: 目前,我的记录器是通过类类型以“标准”方式创建的 public class Thermo
log4j.logger.mydevice123=DEBUG
如何通过包层次结构和实例ID设置日志级别?
到目前为止,我的想法是:
目前,我的记录器是通过类类型以“标准”方式创建的
public class Thermometer extends AnalogDevice {
private static final Logger logger = LoggerFactory.getLogger(Thermometer.class);
...
}
但我希望能够为特定设备选择日志级别。我目前的想法是在记录器名称中使用ID,如下所示:
public class Thermometer extends AnalogDevice {
private final Logger logger;
public Thermometer(String deviceId){
logger = LoggerFactory.getLogger(deviceId+"."+Thermometer.class);
...
}
...
}
(层次结构中的其他类和绑定到此设备的其他类也是如此)这将允许配置log4j,使设备“mydevice123”的所有消息都处于调试级别
log4j.logger.mydevice123=DEBUG
但这可能会创建许多记录器(每个设备/每个类):
mydevice123.com.example.dev.temperometer.class
mydevice123.com.example.dev.AnalogDevice.class
mydevice123.com.example.dev.SomeOtherDeviceSpecific.class
log4j.logger.com.example.dev=DEBUG
有什么更好的方法吗?使用logback作为日志实现 在MDC()中设置设备id(*) 建立一个
(*)在MDC中设置设备id的一个好方法是使用应用于每个业务方法的方面,该方面将从目标对象()获取设备id,在方法调用之前在上下文中设置id,并在方法调用之后将其删除。我正在调查MDC。乍一看,MDC是“每线程”这一事实并不是最简单的解决方案——您总是必须在每次调用时设置和取消设置值,尽管我的体系结构更适合于将某个实例与某个ID关联。是的:)它看起来确实像一台Rube Goldberg机器,但您尝试实现的并不常见。可能有一个更简单的方法,如果你找到一个,请张贴它。你明白我的意思了,祝你好运