log4j mysql 详细日志_使用log4j把日志信息保存到数据库

展开全部

log4j 包里面有一个 SQL 的 appender ,但我知道以前的版本中有bug,因为它生成 SQL 时用的是 createStatement 拼接字符串而不是 PreparedStatement ,因此当消息62616964757a686964616fe59b9ee7ad9431333335343361内容中有单引号或特殊符号时 SQL 都有语法错误执行不成功。

你需要自己扩展一下它提供自己的 SQLAppender 来做这件事。在网上搜索一个像 decompiler 这样的 Java 反编译器或从 Apache 网站去下载 log4j 源码来看一下 SQL appender 是怎么样的,我们改写它把这个 bug 解决了就可以用了。

如果你打算用 ODBC 数据源而不是 JDBC 来做,你需要确保你的 JRE 是 Oracle / Sun 提供的,因为像 IBM 的 JRE 就没有自带 ODBC 驱动程序,或者你自己去手工下载第三方的 ODBC 驱动程序。

从你的错误消息说 数据源找不到,对比下面这个图片,你没有设置它的 driver 参数,左边所有以 set 开头的方法就是表示你在 log4j.properties 文件中可以给它设置的参数,比如,setPassword 表示这个 JDBC Appender 有一个属性  password。

log4j.appender.mySQLAppender.password = 密码

log4j.appender.mySQLAppender.user = 用户名

。。。 其它 set 方法对应的属性列举在这里。。。

依此类推。

a68ebe272422d2e8f055cafbbd4c99cf.png

我们需要纠正的 bug 在这里面,你需要提供自己的类继承原来的 JDBCAppender 把这个 statement 改成 PreparedStatement 来访问数据库,就是需要 stmt.setString(1, myMsg); 这种,而不是直接拼接字符串的。

6ff78a682bab8a5280ed564854401b8e.png

看了它的 JDBCAppender.execute 方法就知道这里有一个 bug:

e33a7322466ea40abe46e0d4d8ad3451.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值