You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Vaibhav Kumar <va...@gmail.com> on 2008/09/04 11:36:18 UTC
CLOB column datatype for JDBCPlus jdbc appender
Hi,
I am using JDBCPlus (http://www.dankomannhaupt.de/projects/index.html ) as a
jdbc appender for my application. For a particular requirement, I have to
make a column datatype from varchar2(4000) to CLOB. But as soon as I do
this, my application fails to log in database giving stack trace as
log4j:ERROR JDBCAppender::flush_buffer(), :
java.sql.SQLException: Internal Error: Unable to construct a Datum from the
specified input
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
at
oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
at
oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
at
org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
at org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:853)
at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
log4j:ERROR JDBCAppender::flush_buffer(), :
java.sql.SQLException: Internal Error: Unable to construct a Datum from the
specified input
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
at
oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
at
oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
at
org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
at org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
at
org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
at org.apache.log4j.Category.callAppenders(Category.java:203)
at org.apache.log4j.Category.forcedLog(Category.java:388)
at org.apache.log4j.Category.log(Category.java:853)
at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
Any suggestions as to how can I incorporate a CLOB datatype in JDBCPlus jdbc
appender will be most welcome.
Regards,
Vaibhav
Re: CLOB column datatype for JDBCPlus jdbc appender
Posted by Vaibhav Kumar <va...@gmail.com>.
Hi Ece,
For CLOB usage, you would have to modify log4j.xml by using the prepared
statement approach. Also you would have to use MDC in your logger class.
eg. in log4j.xml
<appender name="JDBC" class="org.apache.log4j.jdbcplus.JDBCAppender">
<param name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<param name="dbclass" value="oracle.jdbc.OracleDriver" />
<param name="username" value="system" />
<param name="password" value="welcome1" />
<param name="connector"
value="edu.unc.its.util.MyOracleConnectionHandler" />
<param name="table" value="error_log" />
<param name="column" value="id~ORACLE_SEQUENCE~error_log_seq" />
<param name="column" value="process_id~MDC~ProcessId" />
<param name="column" value="process_name~MDC~ProcessName" />
<param name="column" value="message_id~MDC~MessageId" />
<param name="column" value="transaction_id~MDC~TransactionId" />
<param name="column" value="instance_id~MDC~InstanceId" />
<param name="column" value="source_system~MDC~SourceSystem" />
<param name="column" value="target_system~MDC~TargetSystem" />
<param name="column" value="error_log_level~MDC~ErrorLogLevel"
/>
<param name="column" value="attribute1~MDC~Attribute1" />
<param name="column" value="attribute2~MDC~Attribute2" />
<param name="column" value="attribute3~MDC~Attribute3" />
<param name="column" value="attribute4~MDC~Attribute4" />
<param name="column" value="attribute5~MDC~Attribute5" />
<param name="column" value="error_message~MDC~ErrorMessage" />
<param name="column" value="row_mod_dt~MDC~RowModifyDate" />
<param name="column" value="row_create_dt~MDC~RowCreateDate" />
<param name="column" value="message_timestamp~MDC~MessageTimestamp"
/>
<param name="usePreparedStatements" value="true" />
<param name="usePreparedStatements" value="true" />
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="error" />
<param name="LevelMax" value="fatal" />
</filter>
</appender>
In logger class code snippet can be:
MDC.put(MESSAGE_TIMESTAMP, getMessageDate(date_time));
MDC.put(PROCESS_ID, process_id);
MDC.put(PROCESS_NAME, process_name);
MDC.put(MESSAGE_ID, message_id);
MDC.put(TRANSACTION_ID, transaction_id);
MDC.put(INSTANCE_ID, instance_id);
MDC.put(SOURCE_SYSTEM, source);
MDC.put(TARGET_SYSTEM, target);
MDC.put(ERROR_LOG_LEVEL, service_level);
MDC.put(ERROR_MESSAGE, message);
MDC.put(ROW_MODIFY_DATE, formatter.format(new Date()));
MDC.put(ROW_CREATE_DATE, formatter.format(new Date()));
subsequently removal also:
MDC.remove(PROCESS_ID);
MDC.remove(PROCESS_NAME);
MDC.remove(MESSAGE_TIMESTAMP);
MDC.remove(MESSAGE_ID);
MDC.remove(TRANSACTION_ID);
MDC.remove(INSTANCE_ID);
MDC.remove(SOURCE_SYSTEM);
MDC.remove(TARGET_SYSTEM);
MDC.remove(ERROR_LOG_LEVEL);
MDC.remove(ERROR_MESSAGE);
MDC.remove(ROW_MODIFY_DATE);
MDC.remove(ROW_CREATE_DATE);
Thanks & Regards,
Vaibhav
On Tue, Nov 25, 2008 at 8:34 PM, Ece Yildirim <ec...@yahoo.com> wrote:
>
> Hi Vaibhav,
>
> I am suffering of the same error. Could you find a solution regarding this
> problem ? I checked org.apache.log4j.jdbcplus.JDBCLogger class, there seems
> to be no explicit implementation for CLOB data type.
>
> Thank you
> Ece
>
>
>
>
> Vaibhav Kumar wrote:
> >
> > Hi,
> > I am using JDBCPlus (http://www.dankomannhaupt.de/projects/index.html )
> as
> > a
> > jdbc appender for my application. For a particular requirement, I have to
> > make a column datatype from varchar2(4000) to CLOB. But as soon as I do
> > this, my application fails to log in database giving stack trace as
> >
> > log4j:ERROR JDBCAppender::flush_buffer(), :
> > java.sql.SQLException: Internal Error: Unable to construct a Datum from
> > the
> > specified input
> > at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
> > at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
> > at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
> > at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
> > at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
> > at
> >
> oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
> > at
> >
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
> > at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
> > at
> >
> org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
> > at
> org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
> > at
> > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
> > at
> >
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
> > at org.apache.log4j.Category.callAppenders(Category.java:203)
> > at org.apache.log4j.Category.forcedLog(Category.java:388)
> > at org.apache.log4j.Category.log(Category.java:853)
> > at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
> > at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
> > log4j:ERROR JDBCAppender::flush_buffer(), :
> > java.sql.SQLException: Internal Error: Unable to construct a Datum from
> > the
> > specified input
> > at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
> > at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
> > at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
> > at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
> > at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
> > at
> >
> oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
> > at
> >
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
> > at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
> > at
> >
> org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
> > at
> org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
> > at
> > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
> > at
> >
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
> > at org.apache.log4j.Category.callAppenders(Category.java:203)
> > at org.apache.log4j.Category.forcedLog(Category.java:388)
> > at org.apache.log4j.Category.log(Category.java:853)
> > at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
> > at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
> >
> >
> > Any suggestions as to how can I incorporate a CLOB datatype in JDBCPlus
> > jdbc
> > appender will be most welcome.
> >
> > Regards,
> > Vaibhav
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/CLOB-column-datatype-for-JDBCPlus-jdbc-appender-tp19306835p20682090.html
> Sent from the Log4j - Dev mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-dev-help@logging.apache.org
>
>
Re: CLOB column datatype for JDBCPlus jdbc appender
Posted by Ece Yildirim <ec...@yahoo.com>.
Hi Vaibhav,
I am suffering of the same error. Could you find a solution regarding this
problem ? I checked org.apache.log4j.jdbcplus.JDBCLogger class, there seems
to be no explicit implementation for CLOB data type.
Thank you
Ece
Vaibhav Kumar wrote:
>
> Hi,
> I am using JDBCPlus (http://www.dankomannhaupt.de/projects/index.html ) as
> a
> jdbc appender for my application. For a particular requirement, I have to
> make a column datatype from varchar2(4000) to CLOB. But as soon as I do
> this, my application fails to log in database giving stack trace as
>
> log4j:ERROR JDBCAppender::flush_buffer(), :
> java.sql.SQLException: Internal Error: Unable to construct a Datum from
> the
> specified input
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
> at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
> at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
> at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
> at
> oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
> at
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
> at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
> at
> org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
> at org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
> at
> org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
> at
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
> at org.apache.log4j.Category.callAppenders(Category.java:203)
> at org.apache.log4j.Category.forcedLog(Category.java:388)
> at org.apache.log4j.Category.log(Category.java:853)
> at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
> at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
> log4j:ERROR JDBCAppender::flush_buffer(), :
> java.sql.SQLException: Internal Error: Unable to construct a Datum from
> the
> specified input
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
> at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
> at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
> at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)
> at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)
> at
> oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)
> at
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)
> at org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)
> at
> org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)
> at org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)
> at
> org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)
> at
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
> at org.apache.log4j.Category.callAppenders(Category.java:203)
> at org.apache.log4j.Category.forcedLog(Category.java:388)
> at org.apache.log4j.Category.log(Category.java:853)
> at edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)
> at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)
>
>
> Any suggestions as to how can I incorporate a CLOB datatype in JDBCPlus
> jdbc
> appender will be most welcome.
>
> Regards,
> Vaibhav
>
>
--
View this message in context: http://www.nabble.com/CLOB-column-datatype-for-JDBCPlus-jdbc-appender-tp19306835p20682090.html
Sent from the Log4j - Dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org