java - 自定义log4j输出至数据库,项目启动时的错误

 白羊蓝色雨线 发布于 2022-10-28 19:12

在项目中添加了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类型的错误呢?

1 个回答
  • event.GetMessage() 定义的返回 Object 类型,这只是一个引用类型,但引用的对象实际是什么类型在这里是看不出来的。从报错的情况来看,这里实际是一个 String 类型的对象,而不是 Log2OrclObject 对象,所以就报 ClassCastException 了。

    简单的举个例子,

    Object o = "Hello World";   // o 是 Object 引用,但实际是 String 类型的对象
    Integer n = (Integer) o;   // ClassCastException
    2022-10-30 03:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有