我有一个项目需求,我们需要在其中使用日志更新数据库。
所以我们如下配置了Apache log4j
# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB
# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/test
# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver
# Set database user name and password
log4j.appender.DB.user=root
log4j.appender.DB.password=
# Set the SQL statement to be executed.
log4j.appender.DB.sql=insert into coupon(couponId,customerName,date,level,message) values("%X{couponId}","%X{customerName}","%d","%p","%m")
# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
由于我们需要与日志一起更新日志表中的几个自定义字段,因此我们将MDC称为如下
但是在此配置之后,由于以下异常,insert语句失败。
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 'AS': initialization started')' at line 1
正如某些博客所建议的那样,添加了5.1.29版本的m-sql-connector.jar。
我仍然遇到错误。
public class DBLoggerTest {
static Logger logger;
public DBLoggerTest() {
//System.setProperty("log4j.configuration", "log4j.properties");
logger = Logger.getLogger(DBLoggerTest.class.getName());
}
public static void main(String[] args) {
MDC.put("couponId",couponId);
MDC.put("customerName",customerName);
logger.error("customer logs in");
MDC.getContext().clear();
}
}
CREATE TABLE coupon
(
couponId varchar(25),
customerName varchar(25),
date Timestamp,
level varchar(10),
message varchar(2500),
);
您能否建议针对此错误的任何解决方案,并建议任何指针来更新自定义字段以及日志。
谢谢
假名
最佳答案
您已在log4j.properties的键log4j.appender.DB.sql的值字符串中使用双引号而不是单引号
您应该使用单引号,如下所示
log4j.appender.DB.sql=insert into coupon(couponId,customerName,date,level,message) values('%X{couponId}', '%X{customerName}', '%d', '%p', '%m')