logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ceki Gülcü <c...@qos.ch>
Subject Re: How to use DBAppender, hsqldb.sql issues
Date Fri, 11 Feb 2005 16:48:37 GMT

Hi Mark,

The hsqldb.sql file will be updated according to your suggestions. Thank 
you very much for your feedback.

At 06:48 PM 2/3/2005, Evans Mark-PT1167 wrote:
>I figured out how to programmatically create a DBAppender and write log 
>messages to a database.  See the sample code (far) below.  In a nutshell, 
>I had to get the DBPerfTest() working first.  Then I worked to get the 
>programmatic version working.  Who knew you had to call activateOptions() 
>on the appender and connection source?  A few more comments in the 
>javadocs could have saved me a day of work.  I'm really looking forward to 
>a beta or first release of 1.3 because it has some very cool features.  I 
>hope my experience (documented below) will help others.
>
>I had a problem with the Hypersonic table creation script, 
>org/apache/log4j/db/dialect/hsqldb.sql.  It contains # characters as 
>comments.  HSQLDB uses // or /* */ for comments.  It also drops the 3 
>logging tables.  This causes an error the first time executed since the 
>tabled don't exist.  They should have an "IF EXISTS" at the end.  Or, they 
>could be removed from this file and moved to a "drop_hsqldb.sql" file to 
>prevent accidental loss of data.  Also, the hsqldb.sql file is missing 
>caller_filename, caller_class, caller_method, and caller_line from the 
>logging_event table.  I'm not sure what their datatypes should be but I 
>made them VARCHAR (except caller_line which I made CHAR(4)).  I looked at 
>the Oracle script to make my guesses.  Perhaps a DB person can clean that 
>up.  See my updated version below.
>
>In order to get this thing going, I had to run the sample from the 
>tests/src/java/org/apache/log4j/db/ and tests/input/db/ areas.  These are 
>in CVS.  To access these files from a browser, go to 
>http://cvs.apache.org/viewcvs.cgi/logging-log4j/ then browse down the 
>tests path.  I used the driver manager append-with-drivermanager1.xml 
>linked from here 
>http://cvs.apache.org/viewcvs.cgi/logging-log4j/tests/input/db/.  The 
>config file references a file input/db/db.properties.  That file does not 
>exist.  I figured out that it contains key=value property pairs used in 
>the append-with-drivermanager1.xml file.  My sample contains:
>
>driverClass=org.hsqldb.jdbcDriver
>url=jdbc:hsqldb:hsql://localhost/xdb
>user=sa
>password=
>
>Of course, if you want to run the 
>tests/src/java/org/apache/log4j/db/DBPerfTest.java program to test logging 
>messages to a database, you have to either run the test in Junit, or whip 
>up your own quickie call frame.  Here's what I added to my hacked version 
>of DBPerfTest to run without JUnit (easier to run in JBuilder or some such 
>dev environment):
>
>   public static void main(String[] args) {
>         try {
>         DBPerfTest dbPerfTest = new DBPerfTest("xyz");
>         dbPerfTest.setUp();
>         dbPerfTest.testLoop();
>         dbPerfTest.tearDown();
>         }
>         catch (Exception e) {
>                 System.err.println("Exception!");
>                 e.printStackTrace();
>         }
>   }
>
>
>Here's the relevant portion of the DBAppender test program:
>
>package logservertest;
>
>import org.apache.log4j.Logger;
>import java.sql.Connection;
>import java.sql.DriverManager;
>import org.apache.log4j.db.DBAppender;
>import org.apache.log4j.db.DriverManagerConnectionSource;
>
>public class JdbcTest {
>         static Logger logger = Logger.getLogger(JdbcTest.class);
>
>         public JdbcTest() {
>         }
>
>         public static void main(String[] args) {
> 
>org.apache.log4j.PropertyConfigurator.configure(System.getProperty("log4j.configuration"));
>
>                 DriverManagerConnectionSource connectionSource = new 
> DriverManagerConnectionSource();
>                 connectionSource.setDriverClass("org.hsqldb.jdbcDriver");
>                 connectionSource.setUrl("jdbc:hsqldb:hsql://localhost/xdb");
>                 connectionSource.setUser("sa");
>                 connectionSource.setPassword("");
>                 connectionSource.activateOptions(); // DON'T FORGET TO 
> ACTIVATE CONNECTION SOURCE!
>
>                 DBAppender dbAppender = new DBAppender();
>                 dbAppender.setLocationInfo(true);
>                 dbAppender.setConnectionSource(connectionSource);
>                 dbAppender.activateOptions();  // DON'T FORGET TO 
> ACTIVATE APPENDER!
>
>                 logger.addAppender(dbAppender);
>
>                 JdbcTest jdbcTest = new JdbcTest();
>
>                 jdbcTest.doit2();
>         }
>
>         public void doit2() {
>                 logger.debug("Debug message.");
>                 logger.info("Info message.");
>                 logger.warn("Warn message.");
>                 logger.error("Error message.");
>                 logger.fatal("Fatal message.");
>         }
>}
>
>
>My modified hsqldb.sql from org.apache.log4j.db.dialect:
>
>// This SQL script creates the required tables by
>// org.apache.log4j.db.DBAppender and org.apache.log4j.db.DBReceiver.
>//
>//
>// It is intended for HSQLDB.
>//
>
>DROP TABLE logging_event_exception IF EXISTS;
>DROP TABLE logging_event_property IF EXISTS;
>DROP TABLE logging_event IF EXISTS;
>
>
>CREATE TABLE logging_event
>   (
>     sequence_number   BIGINT NOT NULL,
>     timestamp         BIGINT NOT NULL,
>     rendered_message  LONGVARCHAR NOT NULL,
>     logger_name       VARCHAR NOT NULL,
>     level_string      VARCHAR NOT NULL,
>     ndc               LONGVARCHAR,
>     thread_name       VARCHAR,
>     reference_flag    SMALLINT,
>     caller_filename   VARCHAR, // New.  M. Evans
>     caller_class      VARCHAR, // New.  M. Evans
>     caller_method     VARCHAR, // New.  M. Evans
>     caller_line       CHAR(4), // New.  M. Evans
>     event_id          INT NOT NULL IDENTITY
>   );
>
>
>CREATE TABLE logging_event_property
>   (
>     event_id          INT NOT NULL,
>     mapped_key        VARCHAR(254) NOT NULL,
>     mapped_value      LONGVARCHAR,
>     PRIMARY KEY(event_id, mapped_key),
>     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
>   );
>
>CREATE TABLE logging_event_exception
>   (
>     event_id         INT NOT NULL,
>     i                SMALLINT NOT NULL,
>     trace_line       VARCHAR NOT NULL,
>     PRIMARY KEY(event_id, i),
>     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
>   );
>
>
>-----Original Message-----
>From: Evans Mark-PT1167
>Sent: Tuesday, February 01, 2005 4:56 PM
>To: log4j-user@logging.apache.org
>Subject: How do I use DBAppender?
>
>
>I've searched high and low on how to use DBAppender.  All I can find is an 
>email here http://java2.5341.com/msg/79650.html whose responses say to 
>look at examples at tests/src/java/org/apache/log4j/db/ and 
>tests/input/db/.  Neither of these exist in the log4j 1.3 alpha 6 
>distribution.  Where can I find these files and where can I find info on 
>how to configure DBAppender?
>
>Thanks,
>Mark Evans
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
>For additional commands, e-mail: log4j-user-help@logging.apache.org

-- 
Ceki Gülcü

   The complete log4j manual: http://www.qos.ch/log4j/



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message