[ 
https://issues.apache.org/jira/browse/LOG4J2-424?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14071914#comment-14071914
 ] 

Gary Gregory commented on LOG4J2-424:
-------------------------------------

Let's be careful here. There are JDBC drivers out there that do type 
conversions on their own.

Perhaps we should state in the docs that you should only do this after you see 
your driver/database fail.

Would a simple way to handle this be to let the config specify which JDBC data 
type to use for a given column and then do some conversion magic?

For the first pass, I would not refactor TypeConverter to see what a JDBC 
appender solution looks like. Then I would consider refactoring so we do not 
create some overly complex framework if all we need is some simple JDBC type 
conversion code. But that's just me, and I'm doing it now :-)



> JDBCAppender: Add support for data types other then String
> ----------------------------------------------------------
>
>                 Key: LOG4J2-424
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-424
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: Appenders
>    Affects Versions: 2.0-beta9
>         Environment: All
>            Reporter: Tihomir Meščić
>            Assignee: Nick Williams
>
> I am using the JDBCAppender to log to a Postgresql database. I have a table 
> (log_entries) that's used for logging purposes. 
> One of the attributes is of type INTEGER. The attribute is something specific 
> for our application and we are using ThreadContext (MDC) to set the value of 
> the parameter.
> Currently, log4j provides no support for integer type attributes in the 
> Column element of the JDBC appender configuration (the only types supported 
> are string (default), timestamp - isEventTimestamp flag and Clob - isClob 
> flag).
> When using the default settings in the Column element of the JDBC appender, 
> log4j will create a prepared statement and try to set the value using the 
> Statement.setString() method. Of course, the JDBC driver throws an exception:
> Caused by: org.postgresql.util.PSQLException: ERROR: column "mn_type_d" is of 
> type integer but expression is of type character varying
>   Hint: You will need to rewrite or cast the expression.
> My appender configuration:
>     <JDBC name="jdbcAppender" tableName="log_entries">
>       <DriverManager url="jdbc:postgresql://10.28.10.32:5432/xxx" 
> username="xxx" password="xxx" />
>       <Column name="log_entries_id" literal="nextval('hibernate_sequence')" />
>      
>       .....
>       <Column name="message" isUnicode="false" pattern="%message" />
>       <Column name="mn_type_d" isUnicode="false" pattern="%X{mn_type_d}" /> 
> <-- this is of type integer in the DB but LOG4J tries to insert it as a 
> String  -->
>     </JDBC>



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to