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语法异常。相关推荐

  1. Oracle数据库常用基本SQL语法

    标题 Oracle数据库常用基本SQL语法 1.表的创建.插入,删除及Oracle和mysql的数据类型的区别 create table item (item_id number(5) primary ...

  2. 数据库简介及SQL语法

    ①Oracle Database:甲骨文公司 ②SQL Server:微软公司 ③DB2:IBM 公司 ④PostgreSQL:开源 ⑤MySQL:开源 ⑥Access:微软公司 [古董] 红色为最常 ...

  3. 数据库的语言——SQL

    DBMS 是一种系统软件,我们要与它交互的时候就必须使用某种语言,在数据库发展初期每一种DBMS 都有自己的特有的语言,不过逐渐的SQL 成为了所有DBMS 都支持的主流语言.SQL 是专为数据库而建 ...

  4. 【java】兴唐第二十五节课(异常和log4j的使用)

    异常 1.try catch finally语法(附带多重catch) 代码实现: public static void main(String[] args) {try {int i = 1/0;} ...

  5. Java异常处理学习笔记(抛出、捕获、finally、异常传播、NPE、断言、日志)

    Java中的异常是什么? Java异常本质上一种class,继承关系如下图所示,Error是严重的错误,程序无能为力,RuntimeException是在运行过程中发生的异常,其余的异常在编写程序的时 ...

  6. log4j.properties配置与将异常输出到Log日志文件实例

    将异常输出到 log日志文件 实际项目中的使用: <dependencies><dependency><groupId>org.slf4j</groupId& ...

  7. 使用log4j将日志输送到控制台、文件或数据库中

    1.log4j简述 log4j是一个用Java编写的可靠,快速和灵活的日志框架(API),是Apache一个开源项目. Log4j是高度可配置的,并可通过在运行时的外部文件配置.它根据记录的优先级别, ...

  8. 【Java编程系列】log4j配置日志按级别分别生成日志文件

    热门系列: [Java编程系列]WebService的使用 [Java编程系列]在Spring MVC中使用工具类调用Service层时,Service类为null如何解决 [Java编程系列]Spr ...

  9. java jar log4j_java项目打包成可执行jar用log4j将日志写在jar所在目录操作

    开发一个demo时想将日志输出到最终打包的jar所在目录,从网上学习实验整理之后的配置如下, log4j.properties log4j.rootLogger = INFO,console,logF ...

最新文章

  1. C# ThreadPool类(线程池)
  2. 多语种下的卡萨帝故事
  3. 任务管理器显示不全 - 确定谁占用了我们的端口
  4. Eclipse安装SVN插件方式简明介绍
  5. 避坑!gulp-imagemin运行出问题
  6. 【nyoj 270】数的分解(统计因子模板)
  7. Java类类getResourceAsStream()方法及示例
  8. Spring Annotation知识梳理
  9. 文档还是程序? Smart Document 技术概述
  10. 基于MATLAB实现四阶龙格库塔法求解一、二阶微分方程实例
  11. 世嘉MD游戏开发【十二】:伪3D地面,Pseudo-3D
  12. 磨皮ps教程-庞姿姿
  13. ios开发 多人语音聊天_iOS语音提醒开发总结
  14. 感谢生命中的每一次遇见
  15. Win7 注册ocx控件 “DllRegisterServer的调用失败,错误代码为0x80040200 ”
  16. Windows slmgr.vbs 命令详解
  17. python web前端 java ui学哪个好_学IT选Java还是Python?就业发展有何区别?
  18. MT2601平台L1.MP9版本DWS配置方法
  19. mtk lcm驱动加载流程
  20. matlab仿真没有synchr,Synchro 7怎么进行仿真?Synchro界面图标介绍

热门文章

  1. matlab 红黑强度图片,matlab图形锐化程序
  2. 关于在node.js 中使用formData 发送axios上传文件失败解决方案
  3. 判断三角形是否是直角三角形
  4. python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码
  5. 【OpenCV 例程200篇】43. 图像的灰度变换(对数变换)
  6. 计算机病毒的危害主要体现于对计算机系统的信息破坏和,2014年中央电大专科信息技术应用理论题.doc...
  7. excel如何输入毫秒级时间
  8. win7 vs2015配置qt5.11
  9. 初识python多线程
  10. vue 字典配置_vue遍历数据及字典的方法