Wednesday, May 09, 2007

Generating log statements from your application

In most software applications, control passes through complex code while users use the system. For large applications it is very important to keep track of where control is passing through in the application, if any exceptions are being thrown and what actions are being invoked by the user. Keepingtrack of these things help in maintaining an audit log and also in debugging the system if it fails at any point.

In this section we will understand why we should not use System.out.println() and we will also understand how to use a very good open source alternative called Log4J.

When you write small programs and run them, how do you keep track of where your program is passing control? How do you debug your program if it does'nt work properly? Most likely the answer is:

System.out.println("some message");

This is the most common way to debug and track a small program, but it is also a flawed approach.

  • It is cumbersome to print the source of the message.
  • It is cumbersome to print a timestamp with the message.
  • We cannot associate different levels with message.
  • We cannot direct the message to different locations.
  • We cannot selectively turn of logging based on source or level.

These factors are not very important for small assignments, but they gain a lot of importance for industrial code, which may send out thousands of log statements that are used not only for debugging, but also for auditing.

Traditionally most companies used to create their own logging libraries, which they used in their software. But this is such a waste. All companies end up making almost the same kind of library, and all of them maintain it for the same reasons.

Log4J, is an open source logging library, that helps us achieve all the above points and more. In the next few posts I will write about how to use Log4J to incorporate logging in your applications.

Even though I speak about Log4J, Java has a standards compliant logging library bundled with the JDK, and the Jakarta Commons Logging framework can call into both Log4J as well as Java Logging API's.

Discuss this post in the learning forum.

Note: This text was originally posted on my earlier blog at
Here are the comments from the original post



Commercial Links

No comments: