Hi Mohan, You should know that Log4j 1 is not supported or maintained ATM. We are all actively supporting and developing Log4j 2 though. I would use v2.x if you can...
Gary On Fri, Jun 19, 2015 at 1:51 PM, Mohan Bhargava <[email protected]> wrote: > I am trying to log to Oracle 11g database using log4j's `DBAppender ( part > of Apache Extras project for log4j ) . I am using log4j-1.2.17 > > Have created the required tables by modifying the Oracle.sql script. Had to > tweak logging_event_id_seq_trig trigger to populate event_id column in > `logging_event` table. This was to avoid SQLException , resulting out of > null values in event_id column. > > CREATE SEQUENCE logging_event_id_seq MINVALUE 1 START WITH 1; > > CREATE TABLE logging_event > ( > sequence_number NUMBER(20) NOT NULL, > timestamp NUMBER(20) NOT NULL, > rendered_message VARCHAR2(4000) NOT NULL, > logger_name VARCHAR2(254) NOT NULL, > level_string VARCHAR2(254) NOT NULL, > ndc VARCHAR2(4000), > thread_name VARCHAR2(254), > reference_flag NUMBER(5), > caller_filename VARCHAR2(254) NOT NULL, > caller_class VARCHAR2(254) NOT NULL, > caller_method VARCHAR2(254) NOT NULL, > caller_line CHAR(4) NOT NULL, > event_id NUMBER(10) PRIMARY KEY > ); > > CREATE TRIGGER logging_event_id_seq_trig > BEFORE INSERT ON logging_event > FOR EACH ROW > DECLARE > BEGIN > SELECT logging_event_id_seq.nextval > INTO :new.event_id FROM dual; > new:sequence_number := :new.event_id; > END; > > > CREATE TABLE logging_event_property > ( > event_id NUMBER(10) NOT NULL, > mapped_key VARCHAR2(254) NOT NULL, > mapped_value VARCHAR2(1024), > PRIMARY KEY(event_id, mapped_key), > FOREIGN KEY (event_id) REFERENCES logging_event(event_id) > ); > > CREATE TABLE logging_event_exception > ( > event_id NUMBER(10) NOT NULL, > i NUMBER(5) NOT NULL, > trace_line VARCHAR2(254) NOT NULL, > PRIMARY KEY(event_id, i), > FOREIGN KEY (event_id) REFERENCES logging_event(event_id) > ); > > I am logging to the database using Oracle JDBC Driver Manager.Here is what > my log4j.xml looks like > > <?xml version="1.0" encoding="UTF-8" ?> > <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> > <log4j:configuration debug="true" > xmlns:log4j='http://jakarta.apache.org/log4j/'> > > <root> > <level value="ALL" /> > <appender-ref ref="DB" /> > </root> > > <appender name="DB" class="org.apache.log4j.DBAppender"> > <param name="locationInfo" value="true" /> > <connectionSource > class="org.apache.log4j.receivers.db.DriverManagerConnectionSource"> > <param name="driverClass" value="oracle.jdbc.driver.OracleDriver" /> > <param name="url" > value="jdbc:oracle:thin:@//some.server.name:1501/some.databse.name" /> > <param name="user" value="some_user" /> > <param name="password" value="some_pwd" /> > </connectionSource> > </appender> > > </log4j:configuration> > > I have written a simple java program to test logging: > > import org.apache.log4j.Logger; > > public class LoggingTest > { > public static Logger log; > > public void logMessage() > { > log = Logger.getLogger(LoggingTest.class.getName()); > > log.info("Entered the logMessage method"); > log.debug("This is a DEBUG message \n"); > log.error("This is a ERROR message \n"); > log.fatal("This is a FATAL message \n"); > log.info("This is a INFO message \n"); > log.warn("This is a WARNING message \n"); > } > > public static void main(String[] args) > { > LoggingTest logObj = new LoggingTest(); > logObj.logMessage(); > } > } > > I am getting the following error (for every log statement) when I run log4j > in debug mode. Whats puzzling is despite the error , I still see events > being logged to the table. I cant figure out what is causing this > particular error. > > log4j:WARN Continuable parsing error 23 and column 23 > log4j:WARN The content of element type "log4j:configuration" must match > > "(renderer*,throwableRenderer?,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)". > log4j: reset attribute= "false". > log4j: Threshold ="null". > log4j: Level value for root is [ALL]. > log4j: root level set to ALL > log4j: Class name: [org.apache.log4j.DBAppender] > log4j: Setting property [locationInfo] to [true]. > log4j: Setting property [driverClass] to > [oracle.jdbc.driver.OracleDriver]. > log4j: Setting property [url] to [jdbc:oracle:thin:@// > some.server.name:1501/some.databse.name]. > log4j: Setting property [user] to [some_user]. > log4j: Setting property [password] to [some_pwd]. > log4j: setConnectionSource called for DBAppender > log4j: DBAppender.activateOptions called > log4j: Adding appender named [DB] to category [root]. > log4j:ERROR problem appending event > java.sql.SQLException: Invalid conversion requested > at > > oracle.jdbc.driver.T4CVarcharAccessor.StringToNUMBER(T4CVarcharAccessor.java:832) > at > > oracle.jdbc.driver.T4CVarcharAccessor.getNUMBER(T4CVarcharAccessor.java:239) > at > oracle.jdbc.driver.T4CVarcharAccessor.getInt(T4CVarcharAccessor.java:527) > at > oracle.jdbc.driver.GeneratedStatement.getInt(GeneratedStatement.java:217) > at > > oracle.jdbc.driver.GeneratedScrollableResultSet.getInt(GeneratedScrollableResultSet.java:573) > at org.apache.log4j.DBAppender.append(DBAppender.java:281) > at > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251) > at > > org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66) > at org.apache.log4j.Category.callAppenders(Category.java:206) > at org.apache.log4j.Category.forcedLog(Category.java:391) > at org.apache.log4j.Category.info(Category.java:666) > at com.log.test.LoggingTest.logMessage(LoggingTest.java:15) > at com.log.test.LoggingTest.main(LoggingTest.java:28) > Caused by: java.lang.NumberFormatException > at java.math.BigDecimal.<init>(BigDecimal.java:470) > at java.math.BigDecimal.<init>(BigDecimal.java:739) > at > > oracle.jdbc.driver.T4CVarcharAccessor.StringToNUMBER(T4CVarcharAccessor.java:825) > ... 12 more > > On setting breakpoints i see the exception being thrown where a string is > being converted to big decimal. this code expects an exponent , when it > does not find one its throws an exception > > // exponent expected > if ((c != 'e') && (c != 'E')) > throw new NumberFormatException(); > > Can someone please help me understand the cause of this error and suggest a > fix for it > -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
