Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logging in web applications: Best practices?

During deployment of a web application (in test environment) on customer site we encountered a problem with logging of the application. I'll shortly try to describe the current situation:

  • Implementation uses Logger retrieved by java.util.logging and apache.commons.logging.
  • In the deployed packages exists a commons-logging.properties pointing to JUL.
  • Application is running on Tomcat 6.x

The customer decided that he wants to use Log4J on tomcat and configured it so it works (generally) - of course it's not working for the mentioned application.

As it seems that we need to change logging implementation anyway - i wanted to ask you for some best practices on how to implement logging in a web application. Following things should be possible:

  • Customer needs to be able to change log-level without modifying anything in the *.war-file. -> If he would have to modify the war-file he would have to do this for every new build ...
  • It should be possible to have some kind of rolling-file-logging (e.g.: max 10 files with max. 10mb each) - of course it should also be up to the customer to define and change this setting ...
  • As another customer might want to use standard JUL-logging instead - I'd of course prefer to not hard-code the preferred library (Log4J in this case).
like image 831
dpr Avatar asked May 31 '12 18:05

dpr


1 Answers

Customer needs to be able to change log-level without modifying anything in the *.war-file.

You can put logging framework configuration file (log4j.xml or logback.xml) outside of the WAR file. Also logback supports automatic reconfiguration when this file is changed.

It should be possible to have some kind of rolling-file-logging

Both log4j and Logback support rolling back of files, both based on size and date, see e.g. RollingFileAppender.

As another customer might want to use standard JUL-logging instead - I'd of course prefer to not hard-code the preferred library (Log4J in this case).

apache-commons-logging is fundamentally broken, use slf4j instead. Then you simply put different implementations on your CLASSPTH. Also the SLF4J API is quite pleasent.

like image 119
Tomasz Nurkiewicz Avatar answered Sep 22 '22 16:09

Tomasz Nurkiewicz