问题
Working on Spring MVC and not having Spring logs has made it hard to debug. I have read few other articles on this problem and none seem to help me.
log4j.properties is in src folder. slf4j-api-1.5.11, slf4j-log4j12-1.5.11, slf4j-simple-1.5.11, commons-logging-1.1.jar and log4j-1.2.16.jar jars are in the classpath.
Log4j content is:
log4j.rootLogger=INFO, console
# Console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer
But I don't see any Spring logs in my console.
Note: Using Spring 3.1
回答1:
Remove commons-logging-1.1.jar and add jcl-over-slf4j-1.5.11.jar, as you need all logging calls to go through slf4j and then handled by log4j.
Also, you will need to add loggers for spring in log4j.properties, as indicated below. log4j.properties needs to end up in tomcat/webapps/<application>/WEB-INF/classes.
#Spring Framework
log4j.logger.org.springframework=INFO
log4j.logger.org.springframework.oxm=INFO
log4j.logger.org.springframework.transaction=WARN
Maven dependencies need to contain entries similar to following (taken from Using SLF4J section).
Note the exclusion of commons-logging and inclusion of jcl-over-slf4j.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.2.RELEASE</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>runtime</scope>
</dependency>
回答2:
Add this...
log4j.appender.stdout.Target=System.out
Also change console to stdout. See example
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
回答3:
When I put log4j.properties to "src" folder I have no spring logs and message:
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
When I moved back to src/main/resources - all works fine. Seems like log4j.properties must be placed at "classes" folder after deploy.
来源:https://stackoverflow.com/questions/18186722/how-to-setup-spring-logs-for-tomcat