У меня есть простой образец log4j:log4j JDBCAppender java.lang.ClassCastException
Test.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.properties:
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>
TestLOGS таблица:
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
но когда я изменить "org.apache.log4j.EnhancedPatternLayout", чтобы org.apache.log4j.PatternLayout в log4j.properties я не 't получить эти исключения, но в столбце THROWABLE таблицы вставлено значение "mainhrowable {100}".
что это проблема?
возможно дубликат: http://stackoverflow.com/questions/6734044/log4j-jdbcappender-to-log-stacktraces – daphshez
Я написал этот образец от этой должности. но моя проблема - это что-то еще, что объясняет в моем посте. – hossein
Это сообщение предложило добавить зависимость, которую я не думаю, что вы добавили, apache-log4j-extras – daphshez