Class DBAppender

java.lang.Object
org.apache.log4j.AppenderSkeleton
org.apache.log4j.db.DBAppender
All Implemented Interfaces:
org.apache.log4j.Appender, org.apache.log4j.spi.OptionHandler, org.apache.log4j.xml.UnrecognizedElementHandler

public class DBAppender extends org.apache.log4j.AppenderSkeleton implements org.apache.log4j.xml.UnrecognizedElementHandler
The DBAppender inserts loggin events into three database tables in a format independent of the Java programming language. The three tables that DBAppender inserts to must exists before DBAppender can be used. These tables may be created with the help of SQL scripts found in the src/java/org/apache/log4j/db/dialect directory. There is a specific script for each of the most popular database systems. If the script for your particular type of database system is missing, it should be quite easy to write one, taking example on the already existing scripts. If you send them to us, we will gladly include missing scripts in future releases.

If the JDBC driver you are using supports the Statement.getGeneratedKeys()method introduced in JDBC 3.0 specification, then you are all set. Otherwise, there must be an SQLDialectappropriate for your database system. Currently, we have dialects for PostgreSQL, MySQL, Oracle and MsSQL. As mentioed previously, an SQLDialect is required only if the JDBC driver for your database system does not support the getGeneratedKeys method.

supported dialects
RDBMS supports
getGeneratedKeys() method
specific
SQLDialect support
PostgreSQL NO present and used
MySQL YES present, but not actually needed or used
Oracle YES present, but not actually needed or used
DB2 YES not present, and not needed or used
MsSQL YES not present, and not needed or used
HSQL NO present and used

Performance: Experiments show that writing a single event into the database takes approximately 50 milliseconds, on a "standard" PC. If pooled connections are used, this figure drops to under 10 milliseconds. Note that most JDBC drivers already ship with connection pooling support.

Configuration DBAppender can be configured programmatically, or using JoranConfigurator. Example scripts can be found in the tests/input/db directory.

  • Field Details

    • insertPropertiesSQL

      static final String insertPropertiesSQL
      See Also:
    • insertExceptionSQL

      static final String insertExceptionSQL
      See Also:
    • insertSQL

      static final String insertSQL
    • connectionSource

      ConnectionSource connectionSource
    • cnxSupportsGetGeneratedKeys

      boolean cnxSupportsGetGeneratedKeys
    • cnxSupportsBatchUpdates

      boolean cnxSupportsBatchUpdates
    • sqlDialect

      SQLDialect sqlDialect
    • locationInfo

      boolean locationInfo
  • Constructor Details

    • DBAppender

      public DBAppender()
  • Method Details

    • activateOptions

      public void activateOptions()
      Specified by:
      activateOptions in interface org.apache.log4j.spi.OptionHandler
      Overrides:
      activateOptions in class org.apache.log4j.AppenderSkeleton
    • getConnectionSource

      public ConnectionSource getConnectionSource()
      Returns:
      Returns the connectionSource.
    • setConnectionSource

      public void setConnectionSource(ConnectionSource connectionSource)
      Parameters:
      connectionSource - The connectionSource to set.
    • append

      protected void append(org.apache.log4j.spi.LoggingEvent event)
      Specified by:
      append in class org.apache.log4j.AppenderSkeleton
    • close

      public void close()
      Specified by:
      close in interface org.apache.log4j.Appender
    • getLocationInfo

      public boolean getLocationInfo()
      Returns value of the LocationInfo property which determines whether caller's location info is written to the database.
    • setLocationInfo

      public void setLocationInfo(boolean locationInfo)
      If true, the information written to the database will include caller's location information. Due to performance concerns, by default no location information is written to the database.
    • requiresLayout

      public boolean requiresLayout()
      Gets whether appender requires a layout.
      Specified by:
      requiresLayout in interface org.apache.log4j.Appender
      Returns:
      false
    • parseUnrecognizedElement

      public boolean parseUnrecognizedElement(Element element, Properties props) throws Exception
      Specified by:
      parseUnrecognizedElement in interface org.apache.log4j.xml.UnrecognizedElementHandler
      Throws:
      Exception