我的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 ...
答案 0 :(得分:0)
要直接解决您的问题: 您应该调试此附加程序,看看会发生什么。
确保数据库驱动程序(在本例中为mysql)出现在应用程序的类路径中。
确保该表/模式存在,因为此附加程序本身不会为您创建模式
请注意,它具有一个“ bufferSize”参数,因此仅当未存储的消息数超过缓冲区时,才会执行实际的数据库请求。
在org.apache.log4j.jdbc.JDBCAppender#execute
上放置一个断点,看看它如何真正执行
总体观察/旁注,与您的答案没有直接关系,但仍然很有价值。 这个附加程序确实过时了,对于现代生产应用程序来说不是一个很好的解决方案(除非您的日志数量很少)。
此附加程序未使用可能受所有现代RDBMS支持的批处理插入。 该附加程序不会用户准备语句。
如今,RDBMS中的全部存储日志确实没有任何意义,日志只能读取和分析,并且RDBMS并没有为此提供真正方便的工具(从视觉和维护角度:如何删除过时的邮件吗?批量删除非常昂贵,需要分区吗?许多RDBMS并不真正支持记录的保留策略...
因此,一种更现代的方法是使用诸如ElasticSearch + Kibana(+一些日志传送器)之类的工具,甚至使用将日志流传输到云中(例如Logz.io)