How to exclude a single Class from a Log4j Logger / Appender?

57,397

Solution 1

Simply configure your fifth class to use the log-level OFF:

log4j.logger.com.example=INFO, MyAppender
log4j.logger.com.example.FifthClass=OFF

Actually I suggest you don't set it to OFF, but to FATAL. ERROR or even WARN instead.

The main reason to want to ignore logging from some class is usually if it logs to much (more than is useful and makes it hard to read the log). However, most of the time you'd still want to know if something goes really wrong. By setting it to ERROR you can still see the real problematic cases, but not be annoyed by tons of INFO log statements.

Solution 2

(Just for sake of the complete answer)

You could try to do it by setting log4j.xml file also. Just log entire package as you like and log the FifthClass differently.

<logger name="com.example">
    <level value="INFO"/>
</logger>

<logger name="com.example.FifthClass">
    <level value="FATAL"/>
</logger>
Share:
57,397
Kai Wähner
Author by

Kai Wähner

Kai Wähner works as Technology Evangelist at TIBCO. Kai’s main area of expertise lies within the fields of Big Data, Advanced Analytics, Machine Learning, Integration, SOA, Microservices, BPM, Cloud and Internet of Things. He is regular speaker at international IT conferences such as JavaOne, O’Reilly Software Architecture or ApacheCon, writes articles for professional journals, and shares his experiences with new technologies on his blog.Contact: [email protected] / @KaiWaehner. Find more details and references (presentations, articles) on his website: www.kai-waehner.de

Updated on February 20, 2020

Comments

  • Kai Wähner
    Kai Wähner over 4 years

    I have a package "com.example". This package has five classes. I want to log four of these classes to a file, but exclude the fifth class.

    I could write four loggers, e.g. logger name="com.example.Class1", and add the same appender to all four loggers. Is there no easier way (let us think that I have 100 instead of 5 classes)?

    There are some other questions like this one. But the other guys just wanted to exclude a class to log this class. This can be solved using the addivity flag. But I think the additivity flag does not work here, becasue I do not want to log the fifth class, but all other ones?!

    Hope someone can help me out?

  • Kai Wähner
    Kai Wähner about 13 years
    Oh, I knew there is a simple way :-)
  • Kai Wähner
    Kai Wähner about 13 years
    Is there any good documentation about the xml configuration of log4j? This is the first time I do not use the configuration via properties. I do not like the XML approach yet (too much boilerplate code)...
  • Joachim Sauer
    Joachim Sauer about 13 years
    I find the JavaDoc to contain the most useful documentation.
  • Speck
    Speck over 9 years
    This also works for subclasses. So if FifthClass were in a package 'com.example.numberedclasses you could exclude all members of that package by setting the logging for that packaged to FATAL.
  • Ralms
    Ralms about 2 years
    And in where should these go in the XML file structure? Is there any documentation reference explaining how it works?