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 Log4j:具有专业化的多个类别_Java_Logging_Log4j - Fatal编程技术网

Java Log4j:具有专业化的多个类别

Java Log4j:具有专业化的多个类别,java,logging,log4j,Java,Logging,Log4j,我对log4j的分类有一些疑问 我有三类 程序 Program.BUILD Program.QUERY 当我定义以下log4j.properties时: log4j.logger.program=调试、标准输出、文件 log4j.logger.program.BUILD=调试,文件 在Java中,我称之为: Logger logger = Logger.getLogger("program.BUILD"); 假设标准输出和文件分别是控制台和文件的附加程序 我的问题是,当我指定这两个类别时,

我对log4j的分类有一些疑问

我有三类

  • 程序
  • Program.BUILD
  • Program.QUERY
当我定义以下log4j.properties时:

log4j.logger.program=调试、标准输出、文件

log4j.logger.program.BUILD=调试,文件

在Java中,我称之为:

Logger logger = Logger.getLogger("program.BUILD");
假设标准输出和文件分别是控制台和文件的附加程序

我的问题是,当我指定这两个类别时,如图所示,`program.BUILD日志被写入控制台和文件。但他只是为文件附加器指定的。然后log4j将其作为继承

我想指定三个类别,但当指定时,他捕获了
程序。只构建该类别中指定的内容,而不获取通用类别(程序)。
但如果未指定,则类别
program.QUERY
program.BUILD
将拾取程序类别,因为它将表示未指定的两个类别


我该怎么做呢?

是的,Log4j有一个继承系统。您可以使用“additivity=false”标志禁用它(即,不要让日志消息冒泡到父类别)

给定记录器的每个已启用日志记录请求都将转发给 该记录器中的所有追加器以及中较高的追加器 等级制度。换句话说,追加器是从附加继承的 记录器层次结构。例如,如果将控制台附加程序添加到 根记录器,则所有已启用的日志记录请求将至少打印 在控制台上。如果在记录器中添加了文件追加器, 比方说C,然后为C启用日志记录请求,并打印C的子项 在文件和控制台上。可以覆盖此默认值 行为,使追加器累积不再是通过 将可加性标志设置为false


(请参阅)

@Croisier在何处添加此标志“additivity=false”?在logger对象中,使用logger.setAdditivity命令program.BUILD(false)?如果我不设置program.BUILD,它仍将从程序继承?如下(假设您使用基于.properties文件的配置):log4j.additivity.program.BUILD=false