簡體   English   中英

如何為每個實例和每個包層次設置日志級別

[英]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

設置一個DynamicThresholdFilter

(*) 恕我直言,在MDC中設置設備ID的一種好方法是使用應用於每個業務方法的方面,該方面將從目標對象中獲取設備ID( 例如spring方面 ),在方法調用之前在上下文中設置ID然后將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM