websphere hibernate logging info commons logging log4j info SystemOut.log Console stdout WAS7 WAS8.5
Problem:
The application is packaged with hibernate and configured with log4j logging (to a rolling, application-specific file - hibernate set to WARN level logging) and deployed to WebSphere with parent last class loading.
Despite all this info-level messages are being output to the WebSphere system-out/console log (in
WAS_HOME\profiles\[profile_name]\logs\[server_name]\SystemOut.log
).Why is the application log4j configuration (in
log4j.properties
) being ignored and how can the application's hibernate logging be diverted away from the console?Solution:
Various resources on the web describe configuring WebSphere logging or hibernate logging but the bottom of this post on Hibernate and Logging specifically describes this 'leaking' of log configuration/output and how to resolve it.
Create a
commons-logging.properties
with the content:org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger... and put this file in the application's classpath (
WEB-INF/classes
for example). Notes:
By default, WebSphere Application Server is installed to use info level tracing (for all loggers that it knowns about). In WAS 8.5 you'll see this in the SystemOut.log:
[22/10/12 12:00:00:000 EST] 00000001 ManagerAdmin I TRAS0017I: The startup trace state is *=info.
You can edit this by going to (in WAS 8.5) Application Servers > [server_name] > Troubleshooting | Change log detail levels. You can specify the logging definition in plain text. For example, turning default logging to
audit
-level and disabling logging for the verbose com.ibm.ws.webcontainer.annotation
module (this is a ':' delimited list):*=audit: com.ibm.ws.webcontainer.annotation=off
Alternatively, use the "Components and Groups" section of the interface to expand items of the "tree" and right-click to select custom logging levels for a given "node" (NB for log4j users, the log levels may not match log4j - eg "audit" and "warning" instead of "warn").
Also interesting to note is that without the
commons-logging.properties
file defined in your web-app you will see every package from your application(s) and their libraries (where classes include logging definitions) included in this "Components and Groups" interface. Therefore if you see org.hibernate.*
disappear from this interface you can be certain the configuration has worked.