日志持久化插入sql语法错误处理
来源:互联网 发布:微念科技有限公司 知乎 编辑:程序博客网 时间:2024/06/12 23:57
准备将项目中的日志持久化到数据库,log4j.properties配置好,项目启动之后报如下错误:
2017-04-30 16:37:35 INFO (org.springframework.context.annotation.ClassPathBeanDefinitionScanner) JSR-250 'javax.annotation.ManagedBean' found and supported for component scanninglog4j:ERROR Failed to excute sqlcom.mysql.jdbc.exceptions.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 'javax.annotation.ManagedBean' found and supported for component scanning')' at line 1
分析过程如下,通过比较数据库中的相邻的日志记录与该日志的区别发现该日志中有单引号,而配置文件中sql的格式中也是使用的是单引号,因此日志插入出现了异常,这个异常是没有经过转义的sql出现了错误的语法的情况下执行插入出了错误,经过配置文件和日志信息综合推断,错误的sql如下:
insert into esmp_log_info (class,method,createtime,loglevel,msg) VALUES ('9','org.springframework.beans.factory.xml.XmlBeanDefinitionReader','loadBeanDefinitions','2017-04-30 04:27:26','INFO','JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning')
插入的动作中values中出现了两对重合的单引号,导致了错误。要使其正确执行必须进行防止出现这个情况。
解决方案:对配置文件中的sql的格式进行转义,防止单引号错误,修改前:
log4j.appender.database.sql=insert into esmp_log_info (class,method,createtime,loglevel,msg) VALUES ('%C','%M','%d{yyyy-MM-dd hh:mm:ss}','%p','%m')
修改后:
log4j.appender.database.sql=insert into esmp_log_info (class,method,createtime,loglevel,msg) VALUES (\"%C\",\"%M\",\"%d{yyyy-MM-dd hh:mm:ss}\",\"%p\",\"%m\")
修改之后启动时没有报错,问题解决了。
附配置文件:
log4j.rootLogger=INFO, DailyRolling, Terminal,database,stdoutlog4j.appender.DailyRolling=com.bj58.esmpol.utils.logs.DailyRollingApenderlog4j.appender.DailyRolling.layout=org.apache.log4j.PatternLayoutlog4j.appender.DailyRolling.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-7p (%c) %m%nlog4j.appender.DailyRolling.File=/tmp/logs/esmpollog4j.appender.DailyRolling.DatePattern=yyyy-MM-dd'.log' log4j.appender.DailyRolling.Threshold=DEBUGlog4j.appender.DailyRolling.BufferedIO=true log4j.appender.DailyRolling.BufferSize=8192log4j.appender.DailyRolling.MaxFileSize=50MBlog4j.appender.DailyRolling.MaxBackupIndex=100log4j.appender.Terminal=org.apache.log4j.ConsoleAppenderlog4j.appender.Terminal.layout=org.apache.log4j.PatternLayoutlog4j.appender.Terminal.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-7p (%c) %m%nlog4j.logger.httpclient.wire=INFOlog4j.logger.org.apache.commons=INFOlog4j.logger.org.hibernate=WARNlog4j.logger.com.mchange.v2=INFOlog4j.logger.org.springframework=INFOlog4j.logger.org.apache.http=WARNlog4j.logger.org.apache.commons.httpclient=WARNlog4j.logger.com.bj58.bsp=INFOlog4j.logger.com.bj58.spat=INFO######################## # JDBC Appender ####################### ### stdout ####log4j.appender.stdout=org.apache.log4j.ConsoleAppender#log4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout#log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n###JDBC###log4j.appender.database=org.apache.log4j.ConsoleAppenderlog4j.appender.database.layout=org.apache.log4j.PatternLayoutlog4j.appender.database.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%nlog4j.appender.database=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.database.driver=com.mysql.jdbc.Driverlog4j.appender.database.URL=jdbc:mysql://localhost:3306/esmp?useUnicode=true&characterEncoding=UTF-8log4j.appender.database.user=rootlog4j.appender.database.password=rootlog4j.appender.database.sql=insert into esmp_log_info (class,method,createtime,loglevel,msg) VALUES ('%C','%M','%d{yyyy-MM-dd hh:mm:ss}','%p','%m')log4j.appender.database.layout=org.apache.log4j.PatternLayout
0 0
- 日志持久化插入sql语法错误处理
- sql 2008 安装失败 mof语法错误 处理
- 持久化日志引擎
- 持久化日志引擎 .
- aof日志持久化
- sql语法错误
- Redis aof日志持久化
- android 数据库插入操作处理中文单引号 不处理会报语法错误
- SQL语句的语法错误
- webbug sql语法错误
- mybatis动态sql语法错误
- java数据持久化处理
- java数据持久化处理
- Mongodb源码分析--日志及持久化
- Mongodb源码分析--日志及持久化
- Mongodb源码分析--日志及持久化
- Mongodb源码分析--日志及持久化
- log4j.xml 日志持久化本地配置
- java学习之路01
- SpringBoot非官方教程 | 第十六篇:用restTemplate消费服务
- 【redis】redis集群节点选举
- Opencv学习——图像及视频读取
- 栈结构
- 日志持久化插入sql语法错误处理
- 总结下安卓实现购物车功能原理
- 【Linux】Ubuntu下C语言访问MySQL数据库入门
- 二叉树的镜像
- C语言编程练习——查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数:
- springMVC 原理
- weka,FP,priori
- 嵌入式系统设计师
- 11大科技趋势