Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

com.klopotek.utils.log
Class JDBCAppender  view JDBCAppender download JDBCAppender.java

java.lang.Object
  extended byorg.apache.log4j.AppenderSkeleton
      extended bycom.klopotek.utils.log.JDBCAppender
All Implemented Interfaces:
org.apache.log4j.Appender, org.apache.log4j.spi.OptionHandler

public class JDBCAppender
extends org.apache.log4j.AppenderSkeleton

The JDBCAppender, writes messages into a database

The JDBCAppender is configurable at runtime by setting options in two alternatives :

1. Use a configuration-file

Define the options in a file (example) and call a PropertyConfigurator.configure(filename) in your code.

2. Use the methods of JDBCAppender to do it

Call JDBCAppender::setOption(JDBCAppender.xxx_OPTION, String value) to do it analogically without a configuration-file (example)

All available options are defined as static String-constants in JDBCAppender named xxx_OPTION.

Here is a description of all available options :

1. Database-options to connect to the database

- URL_OPTION : a database url of the form jdbc:subprotocol:subname

- USERNAME_OPTION : the database user on whose behalf the connection is being made

- PASSWORD_OPTION : the user's password

2. Connector-option to specify your own JDBCConnectionHandler

- CONNECTOR_OPTION : a classname which is implementing the JDBCConnectionHandler-interface

This interface is used to get a customized connection.

If in addition the database-options are given, these options will be used as arguments for the JDBCConnectionHandler-interface to get a connection.

Else if no database-options are given, the JDBCConnectionHandler-interface is called without them.

Else if this option is not defined, the database-options are required to open a connection by the JDBCAppender.

3. SQL-option to specify a static sql-statement which will be performed with every occuring message-event

- SQL_OPTION : a sql-statement which will be used to write to the database

Use the variable @MSG@ on a location in the statement, which has to be dynamically replaced by the message-text.

If you give this option, the table-option and columns-option will be ignored !

4. Table-option to specify a table contained by the database

- TABLE_OPTION : the table in which the logging will be done

5. Columns-option to describe the important columns of the table (Not nullable columns are mandatory to describe!)

- COLUMNS_OPTION : a formatted list of column-descriptions

Each column description consists of

- the name of the column (required)

- a logtype which is a static constant of class LogType (required)

- and a value which depends by the LogType (optional/required, depending by logtype)

Here is a description of the available logtypes of class LogType and how to handle the value:

o MSG = a value will be ignored, the column will get the message. (One columns need to be of this type!)

o STATIC = the value will be filled into the column with every logged message. (Ensure that the type of value can be casted into the sql-type of the column!)

o ID = value must be a classname, which implements the JDBCIDHandler-interface.

o TIMESTAMP = a value will be ignored, the column will be filled with a actually timestamp with every logged message.

o EMPTY = a value will be ignored, the column will be ignored when writing to the database (Ensure to fill not nullable columns by a database trigger!)

If there are more than one column to describe, the columns must be separated by a Tabulator-delimiter (unicode0008) !

The arguments of a column-description must be separated by the delimiter '~' !

(Example : name1~logtype1~value1 name2~logtype2~value2...)

6. Layout-options to define the layout of the messages (optional)

- _ : the layout wont be set by a xxx_OPTION

See the configuration-file and code examples below...

The default is a layout of the class org.apache.log4j.PatternLayout with the pattern=%m which representate only the message.

7. Buffer-option to define the size of the message-event-buffer (optional)

- BUFFER_OPTION : define how many messages will be buffered until they will be updated to the database.

The default is buffer=1, which will do a update with every happened message-event.

8. Commit-option to define a auto-commitment

- COMMIT_OPTION : define whether updated messages should be committed to the database (Y) or not (N).

The default is commit=Y.

The sequence of some options is important :

1. Connector-option OR/AND Database-options

Any database connection is required !

2. (Table-option AND Columns-option) OR SQL-option

Anything of that is required ! Whether where to write something OR what to write somewhere...;-)

3. All other options can be set at any time...

The other options are optional and have a default initialization, which can be customized.

Here is a configuration-file example, which can be used as argument for the PropertyConfigurator : configfile_example.txt

Here is a code-example to configure the JDBCAppender with a configuration-file : code_example1.java

Here is a another code-example to configure the JDBCAppender without a configuration-file : code_example2.java

Author : Thomas Fenner

Since:
1.0

Field Summary
private  java.util.ArrayList buffer
           
static java.lang.String BUFFER_OPTION
          A buffer-option to define the size of the message-event-buffer
private  int buffer_size
           
static java.lang.String COLUMNS_OPTION
          A columns-option to describe the important columns of the table
static java.lang.String COMMIT_OPTION
          A commit-option to define a auto-commitment
private  java.sql.Connection con
           
private  boolean configured
           
private  boolean connected
           
private  java.lang.String connection_class
           
private  JDBCConnectionHandler connectionHandler
           
static java.lang.String CONNECTOR_OPTION
          A connector-option to specify your own JDBCConnectionHandler
private  boolean docommit
           
private  JDBCLogger jlogger
           
private  java.lang.String password
           
static java.lang.String PASSWORD_OPTION
          A database-option to set the user's password.
private  boolean ready
           
private  java.lang.String sql
           
static java.lang.String SQL_OPTION
          A sql-option to specify a static sql-statement which will be performed with every occuring message-event
private  java.lang.String table
           
static java.lang.String TABLE_OPTION
          A table-option to specify a table contained by the database
private  java.lang.String url
           
static java.lang.String URL_OPTION
          A database-option to to set a database url of the form jdbc:subprotocol:subname.
private  java.lang.String username
           
static java.lang.String USERNAME_OPTION
          A database-option to set the database user on whose behalf the connection is being made.
 
Fields inherited from class org.apache.log4j.AppenderSkeleton
closed, errorHandler, headFilter, layout, name, tailFilter, threshold
 
Constructor Summary
JDBCAppender()
           
 
Method Summary
 void append(org.apache.log4j.spi.LoggingEvent event)
          Internal method.
 void close()
          Internal method.
protected  boolean configure()
          Internal method.
protected  void connect()
          Internal method.
 void finalize()
          If program terminates close the database-connection and flush the buffer
 void flush_buffer()
          Internal method.
 java.lang.String[] getOptionStrings()
          Internal method.
 boolean ready()
          Internal method.
 boolean requiresLayout()
          Internal method.
 boolean setLogType(java.lang.String _name, int _logtype, java.lang.Object _value)
          You have to call this function for all provided columns of your log-table !
 void setOption(java.lang.String _option, java.lang.String _value)
          Sets all necessary options
 
Methods inherited from class org.apache.log4j.AppenderSkeleton
activateOptions, addFilter, clearFilters, doAppend, getErrorHandler, getFilter, getFirstFilter, getLayout, getName, getThreshold, isAsSevereAsThreshold, setErrorHandler, setLayout, setName, setThreshold
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

URL_OPTION

public static final java.lang.String URL_OPTION
A database-option to to set a database url of the form jdbc:subprotocol:subname.

See Also:
Constant Field Values

USERNAME_OPTION

public static final java.lang.String USERNAME_OPTION
A database-option to set the database user on whose behalf the connection is being made.

See Also:
Constant Field Values

PASSWORD_OPTION

public static final java.lang.String PASSWORD_OPTION
A database-option to set the user's password.

See Also:
Constant Field Values

TABLE_OPTION

public static final java.lang.String TABLE_OPTION
A table-option to specify a table contained by the database

See Also:
Constant Field Values

CONNECTOR_OPTION

public static final java.lang.String CONNECTOR_OPTION
A connector-option to specify your own JDBCConnectionHandler

See Also:
Constant Field Values

COLUMNS_OPTION

public static final java.lang.String COLUMNS_OPTION
A columns-option to describe the important columns of the table

See Also:
Constant Field Values

SQL_OPTION

public static final java.lang.String SQL_OPTION
A sql-option to specify a static sql-statement which will be performed with every occuring message-event

See Also:
Constant Field Values

BUFFER_OPTION

public static final java.lang.String BUFFER_OPTION
A buffer-option to define the size of the message-event-buffer

See Also:
Constant Field Values

COMMIT_OPTION

public static final java.lang.String COMMIT_OPTION
A commit-option to define a auto-commitment

See Also:
Constant Field Values

url

private java.lang.String url

username

private java.lang.String username

password

private java.lang.String password

table

private java.lang.String table

connection_class

private java.lang.String connection_class

sql

private java.lang.String sql

docommit

private boolean docommit

buffer_size

private int buffer_size

connectionHandler

private JDBCConnectionHandler connectionHandler

buffer

private java.util.ArrayList buffer

con

private java.sql.Connection con

jlogger

private JDBCLogger jlogger

connected

private boolean connected

configured

private boolean configured

ready

private boolean ready
Constructor Detail

JDBCAppender

public JDBCAppender()
Method Detail

finalize

public void finalize()
If program terminates close the database-connection and flush the buffer


getOptionStrings

public java.lang.String[] getOptionStrings()
Internal method. Returns a array of strings containing the available options which can be set with method setOption()


setOption

public void setOption(java.lang.String _option,
                      java.lang.String _value)
Sets all necessary options


requiresLayout

public boolean requiresLayout()
Internal method. Returns true, you may define your own layout...


close

public void close()
Internal method. Close the database connection & flush the buffer.


setLogType

public boolean setLogType(java.lang.String _name,
                          int _logtype,
                          java.lang.Object _value)
You have to call this function for all provided columns of your log-table !


append

public void append(org.apache.log4j.spi.LoggingEvent event)
Internal method. Appends the message to the database table.


flush_buffer

public void flush_buffer()
Internal method. Flushes the buffer.


ready

public boolean ready()
Internal method. Returns true, when the JDBCAppender is ready to append messages to the database, else false.


connect

protected void connect()
                throws java.lang.Exception
Internal method. Connect to the database.


configure

protected boolean configure()
Internal method. Configures for appending...