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

Kai Wähner picture Kai Wähner · Mar 11, 2011 · Viewed 54.4k times · Source

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?

Answer

Joachim Sauer picture Joachim Sauer · Mar 11, 2011

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.