log4j 输出到数据库的BUG 5C

[概述]
项目中使用log4j输出到数据库,记录用户访问系统的次数
[环境说明]
spring开发
使用的jar包
log4j-1.2.17.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
[问题描述]
设置缓存10条记录再插入数据库
注释输出到控制台
于是就出现,插入的10条记录的[方法名],[类名]都重复的问题(最后一次的访问记录覆盖前面9次的记录)
图片说明

[情况二]
开启输出到控制台的功能, 数据库插入的记录就会正确
图片说明

[log4j配置文件]

log4j.rootLogger=debug,db,stdout
log4j.logger.org.springframework=error
log4j.logger.com.mchange=error
## 输出到数据库
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.Threshold=info
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n
log4j.appender.db.BufferSize=10
log4j.appender.db.driver=com.mysql.jdbc.Driver
log4j.appender.db.URL=jdbc\:mysql\://127.0.0.1\:3306/ztyx?useUnicode\=true&characterEncoding\=utf8
log4j.appender.db.user=root
log4j.appender.db.password=pass

log4j.appender.db.sql=insert into t_user_log (ACTION_DATE,ACTION_USER,CLASS,METHOD,RESULT,REM) VALUES ('%d{yyyy-MM-dd HH:mm:ss}','%X{user}','%C{1}','%M','%X{rs}','%m')

## 输出到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=info
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] {%t} at %c.%M(%c{1}.java:%L)%n%m%n

大家有没有遇到这样的情况, 为什么缓存输出到数据库会出现覆盖前面的值? 这应该是log4j的bug吧

更诡异的是,同时开启输出到控制台的配置, 输出到数据库就正常了

3个回答

您先试试楼上的方法,若没有解决检查一下是不是log4j的版本问题,或者是与数据库的版本不对;再排除一下字符不匹配的问题。

sadkilo
sadkilo 看过了, 没看出跟我有啥区别
接近 2 年之前 回复

不是bug,把layout相关配置去掉就行了
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n
只需要配置log4j.appender.db.sql就够了

sadkilo
sadkilo 回复zhaomin_g: 对啊,我多余的配置项全部去掉了, 还是方法名和类目重复
接近 2 年之前 回复
zhaomin_g
_zming 回复sadkilo: 去掉和未去掉结果相同?你用使用log4j将你的sql往控制台打一份看看,把其余不相干的配置全部去掉
接近 2 年之前 回复
sadkilo
sadkilo 去掉也不行啊
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问