Jump to: navigation, search


< EclipseLink‎ | Examples‎ | Foundation
Revision as of 01:50, 27 April 2009 by Bourges.laurent.gmail.com (Talk | contribs) (Using Log4J)

How do I integrate with a third party logging framework

EclipseLink's default logging is based on Java (1.4 an higher) java.util.logging but is also extensible to allow other logging frameworks to be used.

This how-to example will illustrate how other logging solutions such as Log4J and Apache common logging can be easily used with EclipseLink.


How to configure a custom logger in JPA

Logging Extension Basics

Customizing EclipseLink to use another logging framework or integrate with an existing logging infrastructure involves:

  1. Implementing your own SessionLog
  2. Configuring the use of your SessionLog

Using Log4J

Two bug reports exist for that point : - https://bugs.eclipse.org/bugs/show_bug.cgi?id=232240 - https://bugs.eclipse.org/bugs/show_bug.cgi?id=247852

The first deals about apache commons Logging 1.1 & Log4J integration with eclipseLink 1.0 (so 1.1 should be supported too) and the second about Log4J integration only.

Both proposed custom implementations for the abstract SessionLog class.

How to use Log4J :

- add apache commons logging 1.1 & log4J libraries in your classpath

- add the sample log4.xml in your classpath : https://bugs.eclipse.org/bugs/attachment.cgi?id=103596

- add the following class in the org.eclipse.persistence.logging package of your own project : https://bugs.eclipse.org/bugs/attachment.cgi?id=104821

- add the following lines to your persistence.xml :

<property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.CommonsLoggingSessionLog"/>

- Compile & deploy your code : that's done.

About log4J levels & eclipselink log levels :

Of course, you should check that the log4J level for the org.eclipse.persistence logger (and your root logger and appenders) is compatible with the eclipselink.logging.level.

For example, in log4j.xml :

 <logger name="org.eclipse.persistence">
   <level value="info"/>

In persistence.xml :

# -----------------------------------------------------------------------------
# Logging level :
#        OFF \u2013 disables logging
#        SEVERE \u2013 logs exceptions indicating EclipseLink cannot continue, as well as any exceptions generated during login. This includes a stack trace.
#        WARNING \u2013 logs exceptions that do not force EclipseLink to stop, including all exceptions not logged with severe level. This does not include a stack trace.
#        INFO \u2013 logs the login/logout per sever session, including the user name. After acquiring the session, detailed information is logged.
#        CONFIG \u2013 logs only login, JDBC connection, and database information.
#        FINE \u2013 logs SQL.
#        FINER \u2013 similar to warning. Includes stack trace.
#        FINEST \u2013 includes additional low level information. 
# -----------------------------------------------------------------------------
eclipselink.logging.level = SEVERE

Change Log levels at runtime : As you may not know, log4J levels can be changed at runtime for debug purposes : see the CommonsLoggingSessionLog#setLevel() method :

   * PUBLIC:<p>Set the lw lev to a logger with name space extracted from the given category.</p>
   * @param level
   * @param category
  public void setLevel(final int level, final String category)

Using Apache Commons Logging

An eclipselink bug report exists : https://bugs.eclipse.org/bugs/show_bug.cgi?id=232240

It deals about apache commons Logging 1.1 & Log4J integration with eclipseLink 1.0 (so 1.1 should be supported too).

To use Apache Commons Logging without Apache Log4J, you can get inspired by this class : https://bugs.eclipse.org/bugs/attachment.cgi?id=104821

Just remove any reference to org.apache.log4j classes ...

please contribute to eclipselink then.