1
votes

I'm having some trouble configuring tomcat 8 logging for my wicket 7 application.

Based on mykong's example here I set up my application's pom and adde the log4.j properties file:

http://www.mkyong.com/wicket/wicket-log4j-integration-example/

My log4j.properties file:

log4j.rootLogger=INFO, stdout, file

# Redirect log messages to console
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

log4j.logger.com.ds=INFO
log4j.logger.org.springframework=WARN
log4j.logger.org.hibernate=WARN
log4j.logger.org.eclipse.jetty=INFO

# Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/aleron.log
log4j.appender.file.MaxFileSize=5KB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

Based on this documentation I've made sure the the jar is present in the lib directory:

https://tomcat.apache.org/tomcat-8.0-doc/logging.html

I've added the following to CATALINA_OPTS based on this SO page:

Where should I put the log4j.properties file?

I've chekc the logs and it appears that the property file is being loaded:

og4j: Trying to find [log4j.xml] using context classloader WebappClassLoader
  context: deathstar
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@3b07d329
.
log4j: Trying to find [log4j.xml] using WebappClassLoader
  context: deathstar
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@3b07d329
 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader WebappClassLoader
  context: deathstar
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@3b07d329
.
log4j: Using URL [file:/opt/apache-tomcat-8.0.24/webapps/deathstar/WEB-INF/classes/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/opt/apache-tomcat-8.0.24/webapps/deathstar/WEB-INF/classes/log4j.properties
log4j: Parsing for [root] with value=[INFO, stdout, file].
log4j: Level token is [INFO].
log4j: Category root set to INFO
log4j: Parsing appender named "stdout".
log4j: Parsing layout options for "stdout".
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n].
log4j: End of parsing for "stdout".
log4j: Setting property [target] to [System.out].
log4j: Parsed "stdout" options.
log4j: Parsing appender named "file".
log4j: Parsing layout options for "file".
log4j: Setting property [conversionPattern] to [%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n].
log4j: End of parsing for "file".
log4j: Setting property [file] to [/opt/apache-tomcat-8.0.24/logs/aleron.log].
log4j: Setting property [maxBackupIndex] to [5].
log4j: Setting property [maxFileSize] to [5KB].
log4j: setFile called: /opt/apache-tomcat-8.0.24/logs/aleron.log, true
log4j: setFile ended
log4j: Parsed "file" options.
log4j: Parsing for [com.ds] with value=[INFO].
log4j: Level token is [INFO].
log4j: Category com.ds set to INFO
log4j: Handling log4j.additivity.com.ds=[null]
log4j: Parsing for [org.springframework] with value=[WARN].
log4j: Level token is [WARN].
log4j: Category org.springframework set to WARN
log4j: Handling log4j.additivity.org.springframework=[null]
log4j: Parsing for [org.eclipse.jetty] with value=[INFO].
log4j: Level token is [INFO].
log4j: Category org.eclipse.jetty set to INFO
log4j: Handling log4j.additivity.org.eclipse.jetty=[null]
log4j: Parsing for [org.hibernate] with value=[WARN].
log4j: Level token is [WARN].
log4j: Category org.hibernate set to WARN
log4j: Handling log4j.additivity.org.hibernate=[null]
log4j: Finished configuring.

I had to add the following exclusion to my webapps pom to get it to works based on the suggestion I saw in the console:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <version>1.1.8.RELEASE</version>
   <exclusions>
      <exclusion>
         <groupId>org.slf4j</groupId>
         <artifactId>log4j-over-slf4j</artifactId>
      </exclusion>
   </exclusions>
</dependency>

Everything seems fine, but the output ignores this configuration.

  1. My aleron.log file is created but stays empty.
  2. catalina.out is not affected by any of these configurations and is flooded with debug info.

Note, this is only an issue when I ran this configuration on Tomcat, locally the log4j properties file is loaded and work fine in IntelliJ.

Used versions:

Tomcat: 8.0.24 Wicket: 7.0.0-M5 Java: 1.7 slf4j-log4j12: 1.6.1

My goals is to get to using the logs level cnfigured whiel deployed to Tomcat 8 and using aleron.log as an output. I'm probably missing something simple.

Any suggestions? Thanks in advance.

2
I'm fairly sure it has nothing to do with it, but Wicket 7 has been released, so there should be no need to use a milestone...Rob Audenaerde
I'm temporarly holding off on that as it makes a unit test fail but I'll do that asap. I'm also confident that can't be the issue.Peter Jaloveczki

2 Answers

0
votes

Did you try to load your configuration with environments like this:

export TOMCAT_OPTS="-Dlog4j.debug -Dlog4j.configuration=config.xml"

Have a look at this page for more information: http://logging.apache.org/log4j/1.2/manual.html

0
votes

I had the same problem and in my case it was because the logback libraries (logback-classic.jar and logback-core.jar) had snuck into my transitive dependencies and were apparently overriding log4j.jar