Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j数据库附加器工作不正常_Java_Logging_Log4j - Fatal编程技术网

Java log4j数据库附加器工作不正常

Java log4j数据库附加器工作不正常,java,logging,log4j,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:330

我的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%准确的


任何人请帮我解决这个问题……请……

直接回答您的问题: 您应该调试这个appender,看看会发生什么

  • 确保DB驱动程序(本例中为mysql)出现在应用程序的类路径中

  • 请确保表/架构存在,因为此追加器本身不会为您创建架构

  • 请注意,它有一个“bufferSize”参数,因此只有当未存储的消息计数超过缓冲区时,才会执行实际的DB请求

  • org.apache.log4j.jdbc.jdbcapender#execute
    上放置一个断点,看看它是如何执行的

  • 总体观察/旁注,与您的答案不直接相关,但仍有价值。 这个appender已经过时了,对于现代生产应用程序来说不是一个很好的解决方案(除非您有非常少的日志)

    此附加器不使用可能所有现代RDBMS都支持的批插入。 此追加器不使用准备好的语句

    总的来说,在RDBMS中存储日志现在已经没有什么意义了,日志是用来读取和分析的,而RDBMS并没有为此提供真正方便的工具(从视觉和维护的角度来看:如何删除过时的邮件?批量删除非常昂贵,分区?许多RDBMS实际上不支持记录保留策略

    因此,一种更为现代的方法是使用ElasticSearch+Kibana(+一些日志托运人)等工具,甚至将日志流式传输到云(如Logz.io)