log4j:MySQL的JDBCAppender错误

时间:2012-11-17 21:12:36

标签: java mysql jdbc log4j

如何修复错误?

log4j.properties

    # Define the root logger with appender file
log4j.rootLogger = ALL, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/youtube

# 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=root

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

jdbcAppender.java

public class jdbcAppender{
  /* Get actual class name to be printed on */
  static Logger log = Logger.getLogger(jdbcAppender.class.getName());

  public static void main(String[] args) throws IOException,SQLException{

     log.debug("Debug");
     log.info("Info");
  }
}

数据库

enter image description here

错误

enter image description here

4 个答案:

答案 0 :(得分:3)

根据您使用的MySQL版本,您需要定义DATED字段,以便它可以接受包含小数秒的DATETIME值。默认情况下,DATETIME接受值为YY-MM-DDDD HH:MM:SS

在此处阅读:http://dev.mysql.com/doc/refman/5.6/en/date-and-time-literals.html#date-and-time-standard-sql-literals

您可能遇到的另一个问题是,MySQL希望分数的分隔符为点(.),而不是逗号。您的异常堆栈跟踪显示逗号作为分隔符,我相信它是从您的系统的区域设置派生的。

答案 1 :(得分:2)

您可以更改insert语句,将日期字符串更改为适当的日期时间,例如:

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x',STR_TO_DATE( '%d', '%Y-%M-%d %H:%i' ),'%C','%p','%m')

这不是合适的格式,只是另一种方法的想法。

我只是在研究mysql毫秒处理,但我看到日期字符串是:'2012-11-17 16:07:29,995',是995毫秒,还是29,995个小数秒?< / p>

答案 2 :(得分:1)

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d','%C','%p','%m')

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d{yyyy-MM-dd HH:mm:ss}','%C','%p','%m')

答案 3 :(得分:0)

您可以更改insert语句以将日期字符串转换为适当的格式。类似的东西:

log4j.appender.DB.sql=INSERT INTO logs VALUES('%x','%d{yyyy-MM-DD HH:MM:SS}','%C','%p','%m')

希望它有所帮助。