Log4J Levels

This log4j post is a tutorial post describing different levels of logging in log4j. This is for log4j beginners only but if you wish to refresh, go ahead and enjoy!

Log4j logger contains three main components namely logger, appender and layout. Logger takes care of the logging mechanism and deals with level of logging. Log4j provides five standard levels of logging. There are two more special levels given by log4j. Above all these, log4j allows you to create custom levels.

Five standard log4j levels

DEBUG Level

This log4j level helps developer to debug application. Level of message logged will be focused on providing support to a application developer.

INFO Level

This log4j level gives the progress and chosen state information. This level will be generally useful for end user. This level is one level higher than DEBUG.

WARN Level

This log4j level gives a warning about an unexpected event to the user. The messages coming out of this level may not halt the progress of the system.

ERROR Level

This log4j level gives information about a serious error which needs to be addressed and may result in unstable state. This level is one level higher than WARN.

FATAL Level

This log4j level is straightforward and you don’t get it quite often. Once you get this level and it indicates application death.

Ads by Google

Two special log4j levels

ALL Level

This log4j level is used to turn on all levels of logging. Once this is configured and the levels are not considered.

OFF Level

This log4j level is opposite to ALL level. It turns off all the logging.

New Trace Level added in Log4j

TRACE Level

This log4j level gives more detailed information than the DEBUG level and sits top of the hierarchy. This level is introduced from version 1.2.12 in log4j.

Custom log4j levels

Log4j’s levels are mostly sufficient for all common applications. Rarely you may need a new Level apart from the levels provided by log4j. In that case you can extend org.apache.log4j.Level class and have your own custom level implementation.

Log4j Logger Output

When a logger is created, generally you assign a level. The logger outputs all those messages equal to that level and also all greater levels than it. So the order for the standard log4j levels are:

Log4J Levels

TRACE Level DEBUG Level INFO Level WARN Level ERROR Level FATAL Level
TRACE Level Y Y Y Y Y Y
DEBUG Level N Y Y Y Y Y
INFO Level N N Y Y Y Y
WARN Level N N N Y Y Y
ERROR Level N N N N Y Y
FATAL Level N N N N N Y
ALL Level Y Y Y Y Y Y
OFF Level N N N N N N

Log4j Level Inheritance Rule

There can be instances when you don’t assign a level to the logger. In such cases log4j handles it seamlessly based on the following level inheritance rule:
The inherited level for a given logger C, is equal to the first non-null level in the logger hierarchy, starting at C and proceeding upwards in the hierarchy towards the root logger.

That means, if you have a package as com.foo.bar and you didn’t allocate a level, then it will inherit the level from com.foo package. Still in that package also if the level is not available, then it will inherit from the log4j root level. The log4j’s root logger is instantiated and available always. Log4j’s root logger by default has DEBUG level.

This Log4J tutorial was added on 16/01/2011.

previous post: Apache (ASF) Resigns from JCP Committee

next post: Wordle – Word Clouds

58 comments on “Log4J Levels

  1. Thanks a lot Joseph.

    Could you give a sample example. How can we turn on or off the logger. Is there way to redirect the log message to standard output?

    • private Logger log = Logger.getLogger(ClassName.class);

      public void MyMehodABC()
      {
      try
      {
      log.info(“we are in MyMethodABC”);
      // code
      }
      }

      For this you have to configure log4j.properties file for configuring where too display this file.

      Using log4j you can manage logging mechanism in File, Console etc etc…

      catch(Exception e)
      {
      log.error(e.getMessage(),e);
      }

  2. Thanks for sending blog material

    Thanks
    Nagender

  3. how to i separate the jvm info in console and application info into .log file

  4. Good one ..i want some example code..can u post the code for logs..

  5. This is quick informative article. Thanks -sant.

  6. hi joe, still i am not getting when to use a particular level like debug info warn error and fatal
    please help with a example

    • Dear…. Its your application related logging mechanism that when you have to use which level of logging.

      Whenever you feel that you want to make Test cases for your program at that time its better to write debug level in every methods of program so if any error occured during the execution then you will find out that in which situation you have to felt down your contrl over the application.

      Generally fatal error is the highest priority based error.

  7. Thanks for simple and useful article

    -Santosh

  8. If you want monitoring Log4j at runtime in your web application, and change the level of a logger, can use Log4j Web Tracker.

  9. Pingback: System.out.println

  10. what is purpose of log4j in java??
    still now i don’t know
    pls help me

  11. what is purpose of log4j in java?
    still now i don’t know
    pls help me

  12. Hi Sir…..,

    Very nice and thank you soo much.

    Regards,
    Supriya

  13. really good way the them is thought.

    thanks,
    Manoj

  14. Very good collection of all topic s… Got inspiration from you to do something healthier .

    Thanks so much Joe and your family.

  15. Thanks for the nice information………….

  16. HI

    i want to send only specific msg into logfile .our require ment is to maintain some particular details like uid chainId etc …into logfile

  17. i’m interested in redirecting log messages from a method “abc” in package “xyz” to go to a specific log file “pqr”. I dont want all the logger messages from package xyz to go to “pqr” but just from that one method (“abc”) in the package.

    How do i achieve this?

    thank u in advance

  18. nice information

    and thank you for given this information..

  19. very gud article…..
    but how to impliment logging facility in our application plz send example

  20. Pingback: Logging in Spring

  21. Thala plz change your(Joe) photo .
    Eventhough u hv done many things, ur photo is not looking good

  22. Thank you. very nice explanation

  23. Thanks. The chart in the “Log4j Logger Output” section was very helpful.

  24. I need some Log4j and ajax material which i can easily understand do needful

  25. It’s very nice to read.could u please provide some Examples.

  26. helo joe,
    how restart java daemon on unix ?
    svcs can’t help me, especially svcadm

  27. how to generate a valid xml output by useing XmlLayout in log4j

  28. Hi Joe,

    Could you please let us know if it is necessary to restart the application server every time the logging level are changed? I tried it without restarting the server, it doesn’t work. Just wanted to know if there is a way to change the logging level without restarting the server.

  29. Can you please provide one sample example for Custom log4j levels

  30. Thanks for your time. Always that I have a doubt respect log levels I come back to this article.

  31. Hi Joe,

    Can you give java example for disable logging(like axis logs,etc… )??

    Thanks in Advance..

  32. how to only one level log it means i want print the only warn statemens

  33. if i enable log level to fatal but log level enable as debug

  34. How to create custom logger level and how to set message in that?

  35. How to create custom logger level and how to set message in that?

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>