【问题标题】:log4j StringToMatch in property file属性文件中的 log4j StringToMatch
【发布时间】:2011-04-13 10:05:57
【问题描述】:

我有以下 XML 配置,我想转换为 java 属性文件。

我遇到错误

log4j:WARN Failed to set property [filter] to value "org.apache.log4j.varia.DenyAllFilter".
log4j:ERROR Could not instantiate class [true].
java.lang.ClassNotFoundException: true
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
    at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:326)
    at org.apache.log4j.PropertyConfigurator.parseAppenderFilters(PropertyConfigurator.java:881)
    at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:812)
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
    at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:395)
    at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:403)
    at simpandfile.main(simpandfile.java:10)

我的 XML 配置

  <filter class="org.apache.log4j.varia.StringMatchFilter">
    <param name="StringToMatch" value="FileNotfound" />
    <param name="AcceptOnMatch" value="true" />
  </filter>

  <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="ERROR"/>
        <param name="LevelMax" value="FATAL"/>
    </filter>

  <filter class="org.apache.log4j.varia.DenyAllFilter"/>

转换后的属性文件如下。使用 XML 配置它工作正常。

属性文件

log4j.rootLogger=INFO, MAIL

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
# here's where I specify the layout and the pattern

log4j.appender.MAIL.BufferSize=1
log4j.appender.MAIL.SMTPHost=xxx.example.com
log4j.appender.MAIL.From=xxx@example.com
log4j.appender.MAIL.To=xxx@example.com
log4j.appender.MAIL.Subject=Test Email.
log4j.appender.MAIL.threshold=error
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n
log4j.appender.MAIL.filter=org.apache.log4j.varia.StringMatchFilter
log4j.appender.MAIL.filter.StringToMatch=Filenotfound
log4j.appender.MAIL.filter.AcceptOnMatch=true
log4j.appender.MAIL.filter=org.apache.log4j.varia.DenyAllFilter


log4j.logger.com.devdaily.myapp=DEBUG
log4j.logger.org.springframework=DEBUG

请告诉我如何在属性文件中使用 StringToMatch 并指定

【问题讨论】:

    标签: properties smtp log4j


    【解决方案1】:
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=%d %-6p [%c] %m%n
    log4j.appender.console.filter.1=org.apache.log4j.varia.StringMatchFilter
    log4j.appender.console.filter.1.StringToMatch=entered
    log4j.appender.console.filter.1.AcceptOnMatch=true
    log4j.appender.console.filter.2=org.apache.log4j.varia.DenyAllFilter
    

    有效

    【讨论】:

    • 我已经尝试过了,它确实有效。检查 Log4j 版本。我使用的是 1.2.16。
    • 在应用转换模式之前,它适用于预格式化文本。
    • javadoc 不是最新的,因为它没有反映源代码(或者可能反过来) 我很难弄清楚在哪里寻找最新的。我在这里写了关于多个过滤器的完整答案; stackoverflow.com/questions/34085162/… 取决于您的 log4j 版本启用多个过滤器更改的方式
    【解决方案2】:

    属性文件不支持过滤器。您必须切换到 XML 配置。

    来自过滤器的文档:

    请注意,只有DOMConfigurator 支持过滤。 PropertyConfigurator 不支持过滤器。


    资源:

    关于同一主题:

    【讨论】:

    • 添加过滤器到 appender 的语法是:log4j.appender.appenderName.filter.ID=fully.qualified.name.of.filter.class log4j.appender.appenderName.filter.ID.option1 =value1 ... log4j.appender.appenderName.filter.ID.optionN=valueN 我在您发送的上述链接中看到了这一点。我不太确定这个
    • 答案是正确的...我测试了 1.2.15、1.2.16、1.2.17 和 PropertyConfigurator 不适用于过滤器...我阅读了您的以下评论(“它有效。1.2.16 – Jan Zyka 2011 年 11 月 15 日 8:48") ...但这不是真的 @JanZyka 。你能分享你的配置吗???
    • 使用 1.2.16 和 1.2.17 的属性文件对我来说效果很好。不适用于 1.2.15 或 1.2.8。
    • log4j.properties 设置时,过滤器 do 也适用于我。
    • 在“理想世界”中,每个人都会使用 log4j2 而不是 log4j(其“官方”生命周期是在 2015 年)。尽管如此,Propertyconfigurator DOES 支持 log4j-1.2.16 和 1.2.17(最终 log4j 版本)的过滤器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多