Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 685
Kai Wähner Avatar asked Mar 11 '11 07:03

Kai Wähner


People also ask

What is file Appender in log4j?

Appenders. Apache log4j provides Appender objects which are primarily responsible for printing logging messages to different destinations such as consoles, files, sockets, NT event logs, etc. Each Appender object has different properties associated with it, and these properties indicate the behavior of that object.

How does log4j Appender work?

In the log4j2 architecture, an appender is basically responsible for sending log messages to a certain output destination. Here are some of the most useful types of appenders that the library provides: ConsoleAppender – logs messages to the System console. FileAppender – writes log messages to a file.

Does log4j throw exception?

Exception thrown when an error occurs while logging. In most cases exceptions will be handled within Log4j but certain Appenders may be configured to allow exceptions to propagate to the application.


2 Answers

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.

like image 175
Joachim Sauer Avatar answered Sep 30 '22 03:09

Joachim Sauer


(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> 
like image 21
Saša Avatar answered Sep 30 '22 02:09

Saša