log4j Databse apender无法正常工作

时间:2018-11-08 04:52:19

标签: java logging log4j

我的log4j.properties文件看起来像

log4j.rootLogger = ERROR,sql, Appender1

log4j.logger.com.endeca=ERROR
log4j.logger.com.endeca.itl.web.metrics=ERROR

log4j.appender.sql=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.sql.URL=jdbc:mysql://192.168.70.39:3306/cortex_mcss_ip
log4j.appender.sql.driver=com.mysql.jdbc.Driver
log4j.appender.sql.user=root
log4j.appender.sql.password=123456
log4j.appender.sql.sql=INSERT INTO errorlog(Level,Msg,CreatedDate) VALUES ('%p','%m',now())
log4j.appender.sql.layout=org.apache.log4j.PatternLayout


log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender1.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

log4j.appender.Appender2=org.apache.log4j.FileAppender
log4j.appender.Appender2.File=D:/Logs/Log4jWebDemo.log
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout.ConversionPattern=%-7p %d [%t] %c %x - %m%n

发生错误时,它可以在控制台和文件附加器上正常工作,但不会将任何东西插入数据库吗?

注意:数据库参数在每个角落的准确性均为100%。

任何人都可以帮助我解决这个问题... plz ...

1 个答案:

答案 0 :(得分:0)

要直接解决您的问题: 您应该调试此附加程序,看看会发生什么。

  1. 确保数据库驱动程序(在本例中为mysql)出现在应用程序的类路径中。

  2. 确保该表/模式存在,因为此附加程序本身不会为您创建模式

  3. 请注意,它具有一个“ bufferSize”参数,因此仅当未存储的消息数超过缓冲区时,才会执行实际的数据库请求。

  4. org.apache.log4j.jdbc.JDBCAppender#execute上放置一个断点,看看它如何真正执行

总体观察/旁注,与您的答案没有直接关系,但仍然很有价值。 这个附加程序确实过时了,对于现代生产应用程序来说不是一个很好的解决方案(除非您的日志数量很少)。

此附加程序未使用可能受所有现代RDBMS支持的批处理插入。 该附加程序不会用户准备语句。

如今,RDBMS中的全部存储日志确实没有任何意义,日志只能读取和分析,并且RDBMS并没有为此提供真正方便的工具(从视觉和维护角度:如何删除过时的邮件吗?批量删除非常昂贵,需要分区吗?许多RDBMS并不真正支持记录的保留策略...

因此,一种更现代的方法是使用诸如ElasticSearch + Kibana(+一些日志传送器)之类的工具,甚至使用将日志流传输到云中(例如Logz.io)