gpt4 book ai didi

java - log4j JDBCAppender java.lang.ClassCastException

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:37 25 4
gpt4 key购买 nike

我有一个简单的 log4j 示例:

测试.java:

package com.mobin.pack1;

import org.apache.log4j.Logger;

public class Test {
final static Logger logger = Logger.getLogger(Test.class);

public static void main(String[] args) {
try {
int x = 0;
int y = 5;
int z = y/x;

System.out.println(z);

} catch (Exception e) {
logger.error("error" , e);
}
}
}

log4j.属性:

log4j.rootLogger = DEBUG, DB
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:mysql://localhost/logDB
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.user=root
log4j.appender.DB.password=123
log4j.appender.DB.sql=INSERT INTO TestLOGS(DATE,LOGGER,LEVEL,MESSAGE,THROWABLE) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%C:%L','%p','%m','%throwable{100}')
log4j.appender.DB.layout=org.apache.log4j.EnhancedPatternLayout

依赖关系:

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

测试日志表:

CREATE TABLE IF NOT EXISTS `TestLOGS` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`DATE` varchar(20) COLLATE utf8_bin NOT NULL,
`LOGGER` varchar(100) COLLATE utf8_bin NOT NULL,
`LEVEL` varchar(10) COLLATE utf8_bin NOT NULL,
`MESSAGE` varchar(1000) COLLATE utf8_bin NOT NULL,
`THROWABLE` varchar(1000) COLLATE utf8_bin DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;

当我运行它时,我得到这个异常:

log4j:WARN Failed to set property [sql] to value "INSERT INTO TestLOGS(DATE,LOGGER,LEVEL,MESSAGE,THROWABLE) VALUES('%d{yyyy-MM-dd HH:mm:ss}','%C:%L','%p','%m','%throwable{100}')". 
java.lang.reflect.InvocationTargetException
.
.
.
Caused by: java.lang.ClassCastException: org.apache.log4j.EnhancedPatternLayout cannot be cast to org.apache.log4j.PatternLayout at org.apache.log4j.jdbc.JDBCAppender.setSql(JDBCAppender.java:330)
.
.
.
log4j:ERROR Failed to excute sql
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'error' at line 1

但是当我在 log4j.properties 中将“org.apache.log4j.EnhancedPatternLayout”更改为 org.apache.log4j.PatternLayout 时,我没有得到这些异常,但在表的 THROWABLE 列中插入了值“mainhrowable{100}”。

问题是什么?

最佳答案

如果您看到 codeorg.apache.log4j.jdbc.JDBCAppender 中,您会注意到在方法 setSql 中需要 org.apache.log4j.PatternLayout 的实例。所以您得到的错误是正确

基本上,您有两种选择:

  • 修改您的 SQL 语句并使用 org.apache.log4j.PatternLayout
  • 扩展类org.apache.log4j.jdbc.JDBCAppender并重写方法setSql。将其添加到您的配置中。

关于java - log4j JDBCAppender java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com