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语法异常。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统创建操作系统用户,linu
- 下一篇: 口腔取模过程及注意事项_康贝齿科首家引进