Search code examples
javawebsphere

Commons logging only going to system logs in WAS 6.1


I am trying to use commons-logging with log4j to write my app logs to a file, but my logs keep going to SystemOut.log. The log file did get created, but its empty.

Here's my log4j.properties and commons-logging.properties(both should be on classpath - they're under WEB-INF/classes)

WEB-INF/classes/ log4j.properties :

log4j.rootLogger=INFO, AppLogAppender
log4j.logger.org.apache.struts2.util.TextProviderHelper=ERROR, AppLogAppender
log4j.logger.com.wawanesa=DEBUG, AppLogAppender

# AppLogAppender
log4j.appender.AppLogAppender=org.apache.log4j.FileAppender
log4j.appender.AppLogAppender.File=/waslogs/applogs/us.log

log4j.appender.AppLogAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AppLogAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

WEB-INF/classes/commons-logging.properties:

priority=1
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl

I have log4j.jar and commons-logging.jar on my application classpath.I have seen the classloader problem in was6.0 where you have to make it "app first", but I dont see any commons-logging classes from the base Websphere classpath in the classloader views.


Solution

  • The fact that the file is empty is telling us that indeed your own log4j.properties is being called, and not some other log4j.properties / log4j.xml in the classpath. Remember, File Appenders in log4j are designed so the output file is created as soon as log4j initializes - not waiting for the first log line to go there.

    Now, I think you're missing this in your commons-logging.properties:

    org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

    If that doesn't help, add the necessary system property to your WAS instance to activate log4j in "debug mode" - property name log4j.debug, value true.