在项目中添加了log4j输出至数据库,自定义了一个Log2OrclObject,结构如下:
public class Log2OrclObject
{
private int log_id;
private String log_user;
private String log_ip;
private String log_sys_name;
private String log_fun_model;
private String log_message;
private String log_date;
private String log_level;
private String log_identity;
private String log_exception;
private String log_logger;
private String log_source;
}
扩展了JdbcAppender,CustomJdbcAppender,如下:
public class CustomJdbcAppender extends AppenderSkeleton
{
private String user;
private String pass;
private String driver;
private String url;
private PreparedStatement pst;
protected void append(LoggingEvent event)
{
this.sql = "insert into Y05_SYSTEMLOGS values(Y05_SYSTEMLOGS_SEQ.nextval,?,?,?,?,?,?,?,?,?,?,?)";
try
{
Class.forName(this.driver);
Connection conn = DriverManager.getConnection(this.url, this.user, this.pass);
this.pst = conn.prepareStatement(this.sql);
Log2OrclObject log2OracleObject = (Log2OrclObject)event.getMessage();
...
}
这么写出来,单独用测试类测试的时候时没有问题的,但是当项目启动时,就会报错:
java.lang.ClassCastException:java.lang.String cannot be cast to com.log4j.Log2OracObject
位置就是在这一行中:
Log2OrclObject log2OracleObject = (Log2OrclObject)event.getMessage();
求解这是什么问题啊? 本来log4j中 event.getMessage()获取到的就是Object类型了,为什么初始化的时候会报是String类型的错误呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
event.GetMessage()定义的返回Object类型,这只是一个引用类型,但引用的对象实际是什么类型在这里是看不出来的。从报错的情况来看,这里实际是一个String类型的对象,而不是Log2OrclObject对象,所以就报ClassCastException了。简单的举个例子,