anchormath anchormath - 4 months ago 7
Java Question

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.

Answer

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.

Comments