日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。

發布時間:2025/3/15 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Log4j進行日志的數據庫持久化,說SQL語法錯誤。。。

在properties的配置中。。。。

log4j.appender.db?=?org.apache.log4j.jdbc.JDBCAppender

log4j.appender.db.BufferSize=1

log4j.appender.db.driver=com.mysql.jdbc.Driver

log4j.appender.db.URL=jdbc:mysql://localhost:3306/home

log4j.appender.db.user=root

log4j.appender.db.password=123323

log4j.appender.db.sql=insert?into?RESLOG?(LogMSG)?values?(%m)????

log4j.appender.db.layout=org.apache.log4j.PatternLayout

以下是控制臺的錯誤內容:

log4j:ERROR?Failed?to?excute?sql

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:?You?have?an?error?in?your?SQL?syntax;?check?the?manual?that?corresponds?to?your?MySQL?server?version?for?the?right?syntax?to?use?near?'WebApplicationContext:?initialization?started)'?at?line?1

at?sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native?Method)

at?sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

at?sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at?java.lang.reflect.Constructor.newInstance(Constructor.java:526)

at?com.mysql.jdbc.Util.handleNewInstance(Util.java:377)

at?com.mysql.jdbc.Util.getInstance(Util.java:360)

at?com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978)

at?com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)

at?com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)

at?com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)

at?com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)

at?com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)

at?com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1618)

at?com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1549)

at?org.apache.log4j.jdbc.JDBCAppender.execute(JDBCAppender.java:218)

at?org.apache.log4j.jdbc.JDBCAppender.flushBuffer(JDBCAppender.java:289)

at?org.apache.log4j.jdbc.JDBCAppender.append(JDBCAppender.java:186)

at?org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)

at?org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)

at?org.apache.log4j.Category.callAppenders(Category.java:206)

at?org.apache.log4j.Category.forcedLog(Category.java:391)

at?org.apache.log4j.Category.log(Category.java:856)

at?org.apache.commons.logging.impl.Log4JLogger.info(Log4JLogger.java:199)

at?org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:273)

at?org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)

at?org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)

at?org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5221)

at?org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

at?org.apache.catalina.core.StandardContext.reload(StandardContext.java:3821)

at?org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1306)

at?org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1289)

at?org.apache.catalina.startup.HostConfig.check(HostConfig.java:1473)

at?org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:280)

at?org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

at?org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)

at?org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1141)

at?org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1377)

at?org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1381)

at?org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1349)

at?java.lang.Thread.run(Thread.java:744)

我用的是mysql5.6,難道是jar包問題,還是啥原因,求解!!

------解決思路----------------------

https://svn.apache.org/repos/asf/logging/log4j/trunk/src/main/java/org/apache/log4j/jdbc/JDBCAppender.java

當然,最好的辦法就是繼承這個類把它的?flushBuffer()?方法中那個操作數據庫的地方:

String?sql?=?getLogStatement(logEvent);

execute(sql);

改成:

PreparedStatement?stmt?=?conn.prepareStatement(getSql());

stmt.setString(1,?getLayout().format(loggingEvent);

stmt.executeUpdate();

注意這是假設我們的?SQL?語句將會是,類似下面這樣,留下一個參數位給?msg?本身:

insert?into?tableName(...,??)

總結

以上是生活随笔為你收集整理的Java异常持久化,Log4j进行日志的数据库持久化,说SQL语法异常。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。