当前位置: 首页 > 知识库问答 >
问题:

如何配置log4j以忽略层次结构记录器

夔高寒
2023-03-14

我有一个log4j配置文件,其中有两个记录器和两个特殊的附加器。该文件的外观如下所示:

log4j.rootLogger=DEBUG, CONSOLE

Logger to be used with Logger.getLogger(Class) method
log4j.logger.foo.bar=ALL, LOGFILE

Logger to be used with Logger.getLogger(String) method
log4j.logger.foo.bar.dummy.pack.XML=ERROR, LOGERRORXML

log4j.appender.LOGERRORXML=org.apache.log4j.RollingFileAppender
log4j.appender.LOGERRORXML.append=true
log4j.appender.LOGERRORXML.encoding=UTF-8
log4j.appender.LOGERRORXML.file=Log_Error.log
log4j.appender.LOGERRORXML.MaxFileSize=52428800
log4j.appender.LOGERRORXML.MaxBackupIndex=10
log4j.appender.LOGERRORXML.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGERRORXML.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.LOGERRORXML.Threshold=ERROR

log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.append=true
log4j.appender.LOGFILE.encoding=UTF-8
log4j.appender.LOGFILE.file=Main_Logger.log
log4j.appender.LOGFILE.MaxFileSize=52428800
log4j.appender.LOGFILE.MaxBackupIndex=10
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.LOGFILE.Threshold=ERROR

这个班看起来是这样的

    package foo.bar.dummy.pack;

    public class Foo
    {
        private static final Logger LOG = Logger.getLogger(Foo.class);

        private static final Logger LOG_XML = Logger.getLogger(Foo.class.getPackage().getName()+".XML");
    }

    public static void main(String[] args)
    {
        LOG.error("Hello ");
        LOG_XML.error("World!");
    }

这样做的结果是:

main_logger.log

[忽略log4j模式布局]您好
[忽略log4j模式布局]世界!

log_error.log

“忽略log4j模式布局”世界!

我的想法只是将我想要的事件记录在分开的文件中,但是当我调用记录器LogerRorXML时,输出在这两个文件中,我的意思是在为LogerRorXMLappender和LogFileappender声明的文件中,即使在我使用LogerRorXML记录器时也是如此。我认为是为了logfileloggerhtml" target="_blank">声明中的层次依赖关系。

如何配置log4j只打印特定附加器(本例中为文件附加器)中的输出,而不依赖层次结构?

共有1个答案

蓬弘
2023-03-14

为避免邮件重复,您可能需要:

#Logger to be used with Logger.getLogger(Class) method
log4j.logger.foo.bar=ALL, LOGFILE
log4j.additivity.foo.bar=false

#Logger to be used with Logger.getLogger(String) method
log4j.logger.foo.bar.dummy.pack.XML=ERROR, LOGERRORXML
log4j.additivity.foo.bar.dummy.pack.XML=false

查看更多Log4j教程:可加性-什么和为什么?

 类似资料:
  • 我们的web应用程序在tomcat 9容器中运行,并使用Log4j 2.13。3作为测井系统。 web应用程序包括org.apache.xmlgraphics:fop 2.3,它使用apache共享日志记录(我们设置中的版本为1.2,而不是fop中最初使用的1.0.4)。 这个组合已经使用log4-jcl、共享日志记录桥运行了多年,所有共享日志记录输出都正确地进入了log4j配置的文件。配置相当简

  • 问题内容: 我正在尝试第一次使用SLF4J(带绑定)。 我想配置3个不同的命名,它们可以由返回,将记录不同的级别并将消息推送到不同的附加程序: 记录器1记录调试并附加到 记录器2记录TRACE +并追加到 记录器3记录ERROR +并追加到其他记录器 此外,我希望以编程方式配置它们(使用Java,而不是XML或log4j.properties文件)。 我想通常,我会在一些自举代码中的某处(如ini

  • 我试图自定义Grails应用程序的日志配置,但appender(及其布局模式)似乎被忽略了。 在配置中。非常棒: Log4J实际上考虑了logger部分(例如,如果我对hibernate的debug和trace行进行注释,那么hibernate语句的记录将按预期停止)。 但我一直在尝试appenders部分的不同版本,似乎都没有考虑,实际上应用于控制台的格式只包括消息本身(例如,如果我编写 在代码

  • 我目前有log4j配置了一个XML配置文件,它有两个附录,“文件”和“电子邮件”。这两个都正常工作,但是我不想发送电子邮件给ESAPI内部产生的错误,所以我在XML文件中放入了一个新的记录器。记录器的完整列表是: 然而,这不起作用。我仍然会收到ESAPI中生成的错误的电子邮件(特别是org.owasp.esapi.reference.Log4JLogger类)。 我还尝试过使用“org.owasp

  • 问题内容: 以下代码是从文档中复制的。我应该能够查看所有信息日志。但是我没有。即使将setLevel设置为INFO,我也只能看到警告和以上内容。 为什么会这样呢?: 输出: 信息和调试消息到哪里去了? 问题答案: 更换线 与 它应该可以按预期工作。如果您不使用任何处理程序来配置日志记录(如您的帖子中所示,您只为记录器配置一个级别,但在任何地方都没有处理程序),则将获得一个“不得已使用”的内部处理程

  • 问题内容: 我的故事: 我想做的事情像将行记录到文件的最简单的log4j记录器一样简单。我发现了几个具有某些功能的示例,但没有一个真正有效的基本通用示例,而没有一个解释每一行如何工作的示例。 题: 有人可以提供吗? 先决条件: 我已经知道将文件放在哪里,并且已经配置了log4j并可以用于控制台日志记录。 现在,我想登录到文件,并在程序运行后从文件系统中查找文件。 需要添加到现有文件的行是所需的输出