I have a problem wih a logging setup in a apring webapp deployed under tomcat 6.
The webapp uses the commons-logging api, on runtime log4j should be used. The log file is created but remains empty – no log entries occur.
the setup is the following:
WEB-INF/web.xml:
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
WEB-INF/classes/commons-logging.properties:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
WEB-INF/log4j.xml:
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name='CONSOLE' class='org.apache.log4j.ConsoleAppender'> ... </appender> <appender name='FILE' class='org.apache.log4j.RollingFileAppender'> <param name='File' value='${catalina.home}/logs/my.log'/> ... </appender> <logger name='my.package'> <level value='INFO'/> </logger> <root> <level value='ERROR'/> <appender-ref ref='CONSOLE'/> <appender-ref ref='FILE'/> </root> </log4j:configuration>
The file logs/my.log is created, but no logs appear. The are info logs on the tomcat console, but not with the layout pattern configured.
The commons-logging-1.1.1.jar and log4j-1.2.14.jar are included in WEB-INF/lib. Any idea what is wrong here?
There are numerous documented instances on the web warning people about the use of commons-logging. So much so, that SLF4J is gaining a lot of popularity.
Considering that you are not interested in using Tomcat with Log4j, you should just use Log4j directly in your application. Particularly if there is no chance that you’ll be switching logging frameworks in the future. It’ll reduce the complexity of your application, and get rid of any class loader issues you are having with commons-logging.
This should be a relatively easy search and replace in your text, as commons-logging and log4j both use a similar call structure for their logging methods.