tags:

views:

27

answers:

2

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.

A: 

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.

Isaac
A: 

The issue with this is that the WebSphere itself using commons-logging so what is happening is that you are picking up the application server's common logging properties file. Try and change the classloader order for the module to "Load application classes first", this should mean that when your application starts up it grabs its own logging configuration rather than the servers.

Michael Ransley