[英]How to set log level per instance and per package hierarchy
我的應用程序管理網絡中的設備。 這些在我的應用程序中由對象和對象組成表示。 這些設備中的每一個都有一個ID,並且與設備相關的每個對象都知道其ID。
配置日志記錄時,除了按包層次結構設置日志級別外,我還希望能夠按設備設置日志級別-也就是說,與一台設備相關的所有實例都應為例如。 置於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.Thermometer.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( 例如spring方面 ),在方法調用之前在上下文中設置ID然后將其刪除
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.