21

I have following XML configration i would like to convert to java property file.

I am getting below error

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)

My XML configration

  <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"/>

After converting the property file is as below. With XML configration it is working fine.

Property File

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

Please let me know how i can use StringToMatch in property file and specify

Kenster
  • 23,465
  • 21
  • 80
  • 106
user171523
  • 4,185
  • 3
  • 35
  • 50

2 Answers2

34
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

does work

Curtis
  • 101,612
  • 66
  • 270
  • 352
tada
  • 341
  • 2
  • 2
  • 3
    I've tried this and it DOES WORK. Check the Log4j version. I was using 1.2.16. – Mike Pone Oct 12 '11 at 18:46
  • 1
    This is documented in the [PropertyConfigurator Javadoc](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html) – Christoph Hösler Feb 09 '17 at 12:11
  • It works on preformatted text, before applying conversion pattern. – Mauricio Nov 28 '18 at 18:07
  • The javadoc is not quite upto date as it does not reflect the source code (or perhaps the other way around) I have a hard time of figuring out where to look for the most uptodate. I wrote a full answer on multiple filters here; https://stackoverflow.com/questions/34085162/multiple-filters-for-log4j-using-properties-file/59090027#59090027 depending on your version of log4j the way to enable multiple filters changes – Peter Nov 28 '19 at 13:33
9

Properties files don't support filters. You'll have to switch to an XML configuration.

From the documentation of Filter :

Note that filtering is only supported by the DOMConfigurator. The PropertyConfigurator does not support filters.


Resources :

On the same topic :

Community
  • 1
  • 1
Colin Hebert
  • 91,525
  • 15
  • 160
  • 151
  • 6
    The syntax for adding Filters to an appender is: 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 I see this in above link you have sent. I am not really very sure about this – user171523 Sep 16 '10 at 22:06
  • Answer is correct... I tested 1.2.15, 1.2.16, 1.2.17 and PropertyConfigurator did not work for filters... I read your below comment ("It works. 1.2.16 – Jan Zyka Nov 15 '11 at 8:48") ... But this is not true @JanZyka . Could you please share your configuration??? – masay Sep 04 '12 at 13:20
  • 3
    Works fine for me using properties files with 1.2.16 and 1.2.17. Does not work for 1.2.15 or 1.2.8. – DNA Nov 08 '12 at 20:53
  • 1
    Filters _do_ work for me as well when setup from `log4j.properties`. – wilx Jan 15 '16 at 13:52
  • In an "ideal world", everybody would be using log4j2 instead of log4j (whose "official" end of life was in 2015). Nevertheless, Propertyconfigurator *DOES* support filters for log4j-1.2.16 and 1.2.17 (the final log4j release). – paulsm4 Feb 15 '18 at 22:04