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

发布于 2022-09-03 19:12:01 字数 1502 浏览 8 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无需解释 2022-09-10 19:12:01

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

简单的举个例子,

Object o = "Hello World";   // o 是 Object 引用,但实际是 String 类型的对象
Integer n = (Integer) o;   // ClassCastException
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文