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).
You can put logging framework configuration file (
log4j.xmlorlogback.xml) outside of the WAR file. Also logback supports automatic reconfiguration when this file is changed.Both log4j and Logback support rolling back of files, both based on size and date, see e.g.
RollingFileAppender.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.