[prev in list] [next in list] [prev in thread] [next in thread]
List: log4j-dev
Subject: Re: CLOB column datatype for JDBCPlus jdbc appender
From: "Vaibhav Kumar" <vaibhavkumar14 () gmail ! com>
Date: 2008-12-01 10:49:53
Message-ID: 349b2c0f0812010237k7a1299eara61894dff5562875 () mail ! gmail ! com
[Download RAW message or body]
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 <eceyld@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
>
>
[Attachment #3 (text/html)]
Hi Ece,<br>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.<br>eg. in \
log4j.xml<br><br><appender name="JDBC" \
class="org.apache.log4j.jdbcplus.JDBCAppender"><br> \
<br> <param name="url" \
value="jdbc:oracle:thin:@localhost:1521:XE"/><br> \
<param name="dbclass" \
value="oracle.jdbc.OracleDriver" /> <br> \
<param name="username" value="system" /> \
<br> <param name="password" \
value="welcome1" /> <br> <param \
name="connector" \
value="edu.unc.its.util.MyOracleConnectionHandler" /> \
<br> <param name="table" \
value="error_log" /> <br> \
<param name="column" \
value="id~ORACLE_SEQUENCE~error_log_seq" /><br> \
<param name="column" \
value="process_id~MDC~ProcessId" /><br> \
<param name="column" \
value="process_name~MDC~ProcessName" /><br> \
<param name="column" \
value="message_id~MDC~MessageId" /><br> \
<param name="column" \
value="transaction_id~MDC~TransactionId" /><br> \
<param name="column" \
value="instance_id~MDC~InstanceId" /><br> \
<param name="column" \
value="source_system~MDC~SourceSystem" /><br> \
<param name="column" \
value="target_system~MDC~TargetSystem" /><br> \
<param name="column" \
value="error_log_level~MDC~ErrorLogLevel" /> \
<br> <param \
name="column" value="attribute1~MDC~Attribute1" \
/><br> <param \
name="column" value="attribute2~MDC~Attribute2" \
/><br> <param \
name="column" value="attribute3~MDC~Attribute3" /><br> \
<param name="column" \
value="attribute4~MDC~Attribute4" /><br> \
<param name="column" \
value="attribute5~MDC~Attribute5" /><br> \
<param name="column" \
value="error_message~MDC~ErrorMessage" /><br> \
<param name="column" \
value="row_mod_dt~MDC~RowModifyDate" /><br> \
<param name="column" \
value="row_create_dt~MDC~RowCreateDate" /><br> \
<param name="column" \
value="message_timestamp~MDC~MessageTimestamp" /> \
<br> \
<param name="usePreparedStatements" value="true" /> \
<br> <param \
name="usePreparedStatements" value="true" /> \
<br> <filter \
class="org.apache.log4j.varia.LevelRangeFilter"><br> \
<param name="LevelMin" \
value="error" /><br> \
<param name="LevelMax" value="fatal" \
/><br> </filter><br> \
</appender><br><br>In logger class code snippet can be:<br> \
MDC.put(MESSAGE_TIMESTAMP, \
getMessageDate(date_time));<br> \
MDC.put(PROCESS_ID, process_id);<br> \
MDC.put(PROCESS_NAME, process_name);<br> \
MDC.put(MESSAGE_ID, message_id);<br> \
MDC.put(TRANSACTION_ID, transaction_id);<br> \
MDC.put(INSTANCE_ID, instance_id);<br> \
MDC.put(SOURCE_SYSTEM, source);<br> \
MDC.put(TARGET_SYSTEM, target);<br> \
MDC.put(ERROR_LOG_LEVEL, service_level);<br> \
MDC.put(ERROR_MESSAGE, message);<br> \
MDC.put(ROW_MODIFY_DATE, formatter.format(new Date()));<br> \
MDC.put(ROW_CREATE_DATE, formatter.format(new \
Date()));<br><br>subsequently removal also:<br><br> \
MDC.remove(PROCESS_ID);<br> \
MDC.remove(PROCESS_NAME);<br> \
MDC.remove(MESSAGE_TIMESTAMP);<br> \
MDC.remove(MESSAGE_ID);<br> \
MDC.remove(TRANSACTION_ID);<br> \
MDC.remove(INSTANCE_ID);<br> \
MDC.remove(SOURCE_SYSTEM);<br> \
MDC.remove(TARGET_SYSTEM);<br> \
MDC.remove(ERROR_LOG_LEVEL);<br> \
MDC.remove(ERROR_MESSAGE);<br> \
MDC.remove(ROW_MODIFY_DATE);<br> \
MDC.remove(ROW_CREATE_DATE);<br><br> \
<br>Thanks & Regards,<br>Vaibhav<br><br><br><div class="gmail_quote"> On \
Tue, Nov 25, 2008 at 8:34 PM, Ece Yildirim <span dir="ltr"><<a \
href="mailto:eceyld@yahoo.com">eceyld@yahoo.com</a>></span> wrote:<br><blockquote \
class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt \
0pt 0.8ex; padding-left: 1ex;"> <br>
Hi Vaibhav,<br>
<br>
I am suffering of the same error. Could you find a solution regarding this<br>
problem ? I checked org.apache.log4j.jdbcplus.JDBCLogger class, there seems<br>
to be no explicit implementation for CLOB data type.<br>
<br>
Thank you<br>
Ece<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
<br>
<br>
Vaibhav Kumar wrote:<br>
><br>
> Hi,<br>
> I am using JDBCPlus (<a href="http://www.dankomannhaupt.de/projects/index.html" \
target="_blank">http://www.dankomannhaupt.de/projects/index.html</a> ) as<br> > \
a<br> > jdbc appender for my application. For a particular requirement, I have \
to<br> > make a column datatype from varchar2(4000) to CLOB. But as soon as I \
do<br> > this, my application fails to log in database giving stack trace as<br>
><br>
> log4j:ERROR JDBCAppender::flush_buffer(), :<br>
> java.sql.SQLException: Internal Error: Unable to construct a Datum from<br>
> the<br>
> specified input<br>
> at \
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)<br> > \
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)<br> > \
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)<br> > \
at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)<br> > \
at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)<br> > \
at<br> > oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)<br>
> at<br>
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)<br>
> at \
org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)<br> > \
at<br> > org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)<br>
> at \
org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)<br> > \
at<br> > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)<br>
> at<br>
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)<br>
> at org.apache.log4j.Category.callAppenders(Category.java:203)<br>
> at org.apache.log4j.Category.forcedLog(Category.java:388)<br>
> at org.apache.log4j.Category.log(Category.java:853)<br>
> at \
edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)<br> > \
at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)<br> > \
log4j:ERROR JDBCAppender::flush_buffer(), :<br> > java.sql.SQLException: Internal \
Error: Unable to construct a Datum from<br> > the<br>
> specified input<br>
> at \
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)<br> > \
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)<br> > \
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)<br> > \
at oracle.sql.SQLUtil.makeDatum(SQLUtil.java:645)<br> > \
at oracle.sql.SQLUtil.makeOracleDatum(SQLUtil.java:946)<br> > \
at<br> > oracle.jdbc.driver.UpdatableResultSet.updateObject(UpdatableResultSet.java:1568)<br>
> at<br>
> oracle.jdbc.driver.OracleResultSet.updateObject(OracleResultSet.java:2787)<br>
> at \
org.apache.log4j.jdbcplus.JDBCLogger.append(JDBCLogger.java:742)<br> > \
at<br> > org.apache.log4j.jdbcplus.JDBCAppender.flush_buffer(JDBCAppender.java:887)<br>
> at \
org.apache.log4j.jdbcplus.JDBCAppender.append(JDBCAppender.java:867)<br> > \
at<br> > org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)<br>
> at<br>
> org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)<br>
> at org.apache.log4j.Category.callAppenders(Category.java:203)<br>
> at org.apache.log4j.Category.forcedLog(Category.java:388)<br>
> at org.apache.log4j.Category.log(Category.java:853)<br>
> at \
edu.unc.its.util.UNCLogger.prepareAndLogMessage(UNCLogger.java:445)<br> > \
at edu.unc.its.util.UNCLoggerClient.main(UNCLoggerClient.java:23)<br> ><br>
><br>
> Any suggestions as to how can I incorporate a CLOB datatype in JDBCPlus<br>
> jdbc<br>
> appender will be most welcome.<br>
><br>
> Regards,<br>
> Vaibhav<br>
><br>
><br>
<br>
</div></div><font color="#888888">--<br>
View this message in context: <a \
href="http://www.nabble.com/CLOB-column-datatype-for-JDBCPlus-jdbc-appender-tp19306835p20682090.html" \
target="_blank">http://www.nabble.com/CLOB-column-datatype-for-JDBCPlus-jdbc-appender-tp19306835p20682090.html</a><br>
Sent from the Log4j - Dev mailing list archive at Nabble.com.<br>
<br>
<br>
---------------------------------------------------------------------<br>
To unsubscribe, e-mail: <a \
href="mailto:log4j-dev-unsubscribe@logging.apache.org">log4j-dev-unsubscribe@logging.apache.org</a><br>
For additional commands, e-mail: <a \
href="mailto:log4j-dev-help@logging.apache.org">log4j-dev-help@logging.apache.org</a><br>
<br>
</font></blockquote></div><br>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic