Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置每个实例和每个包层次结构的日志级别_Java_Logging_Log4j_Slf4j - Fatal编程技术网

Java 如何设置每个实例和每个包层次结构的日志级别

Java 如何设置每个实例和每个包层次结构的日志级别,java,logging,log4j,slf4j,Java,Logging,Log4j,Slf4j,我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象的组合表示。 每个设备都有一个ID,与设备相关的每个对象都知道其ID 在配置日志记录时,除了设置每个包层次结构的日志级别外,我还希望能够设置每个设备的日志级别-也就是说,与一个设备相关的所有实例都应该设置为调试级别 log4j.logger.mydevice123=DEBUG 如何通过包层次结构和实例ID设置日志级别? 到目前为止,我的想法是: 目前,我的记录器是通过类类型以“标准”方式创建的 public class Thermo

我的应用程序管理网络中的设备。这些在我的应用程序中由对象和对象的组合表示。 每个设备都有一个ID,与设备相关的每个对象都知道其ID

在配置日志记录时,除了设置每个包层次结构的日志级别外,我还希望能够设置每个设备的日志级别-也就是说,与一个设备相关的所有实例都应该设置为调试级别

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机器,但您尝试实现的并不常见。可能有一个更简单的方法,如果你找到一个,请张贴它。你明白我的意思了,祝你好运