如何设置每个实例和每个包层次结构的日志级别
How to set log level per instance and per package hierarchy
我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象组合表示。
这些设备中的每一个都有一个 ID,与设备相关的每个对象都知道它的 ID。
配置日志记录时,除了按包层次结构设置日志级别外,我还希望能够按设备设置它——也就是说,与一个设备相关的所有实例都应该是,例如。放入 DEBUG 级别。
如何通过包层次结构和实例 ID 设置日志级别?
到目前为止我的想法:
目前我的记录器是以 "standard" 方式创建的 class 类型
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);
...
}
...
}
(对于层次结构中的其他 classes 和绑定到此设备的其他 classes 也是如此)这将允许配置 log4j 以包含设备 "mydevice123" 的所有消息在调试级别。
log4j.logger.mydevice123=DEBUG
但这可能会创建许多记录器(每个设备/每个 class):
mydevice123.com.example.dev.Thermometer.class
mydevice123.com.example.dev.AnalogDevice.class
mydevice123.com.example.dev.SomeOtherDeviceSpecific.class
- ...
我现在也失去了在包层次结构上设置级别的可能性。这将不再起作用。
log4j.logger.com.example.dev=DEBUG
有什么更好的方法?
使用 logback 作为您的日志记录实现。
在 MDC 中设置您的设备 ID (Mapped Diagnostic Context) (*)
(*) 恕我直言,在 MDC 中设置设备 ID 的一个好方法是使用一个应用于每个业务方法的方面,该方法将从目标对象获取设备 ID (exemple with spring aspects ), 在方法调用之前在上下文中设置 id 并在
之后将其删除
我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象组合表示。 这些设备中的每一个都有一个 ID,与设备相关的每个对象都知道它的 ID。
配置日志记录时,除了按包层次结构设置日志级别外,我还希望能够按设备设置它——也就是说,与一个设备相关的所有实例都应该是,例如。放入 DEBUG 级别。
如何通过包层次结构和实例 ID 设置日志级别?
到目前为止我的想法:
目前我的记录器是以 "standard" 方式创建的 class 类型
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);
...
}
...
}
(对于层次结构中的其他 classes 和绑定到此设备的其他 classes 也是如此)这将允许配置 log4j 以包含设备 "mydevice123" 的所有消息在调试级别。
log4j.logger.mydevice123=DEBUG
但这可能会创建许多记录器(每个设备/每个 class):
mydevice123.com.example.dev.Thermometer.class
mydevice123.com.example.dev.AnalogDevice.class
mydevice123.com.example.dev.SomeOtherDeviceSpecific.class
- ...
我现在也失去了在包层次结构上设置级别的可能性。这将不再起作用。
log4j.logger.com.example.dev=DEBUG
有什么更好的方法?
使用 logback 作为您的日志记录实现。
在 MDC 中设置您的设备 ID (Mapped Diagnostic Context) (*)
(*) 恕我直言,在 MDC 中设置设备 ID 的一个好方法是使用一个应用于每个业务方法的方面,该方法将从目标对象获取设备 ID (exemple with spring aspects ), 在方法调用之前在上下文中设置 id 并在
之后将其删除