【问题标题】:log4j logging to postgresql not workinglog4j 记录到 postgresql 不起作用
【发布时间】:2012-12-27 06:18:19
【问题描述】:

这是数据库架构

create table log4j_messages 
( 
  message  varchar(2000), 
  class    varchar(255), 
  priority varchar(64), 
  log_date timestamp 
);

以下是我的 log4j 属性

log4j.appender.jdbc=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.jdbc.driver=org.postgresql.Driver
log4j.appender.jdbc.URL=jdbc:postgresql://MYSERVER:5432/logs 
log4j.appender.jdbc.user=logs
log4j.appender.jdbc.password=MYPASS
log4j.appender.jdbc.sql=INSERT INTO log4j_messages (message, class, priority, log_date) values ('%m', '%c', '%p', to_timestamp('%d', 'YYYY-MM-DD HH24:MI:SS,MS'))

没有数据被记录到数据库中。无论如何我可以找出问题所在吗?

编辑:

我尝试在属性文件顶部添加 log4j.rootCategory=DEBUG,现在我收到以下警告。

log4j:WARN 找不到记录器 (myprogram.Main) 的附加程序。 log4j:WARN 请正确初始化 log4j 系统。 log4j:WARN 请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。

以下是写入文件时我的 log4j 属性文件的工作版本

log4j.rootCategory=DEBUG, R, O

# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender

# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log

# Control the maximum log file size
log4j.appender.R.MaxFileSize=500KB

# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n

【问题讨论】:

  • 确保 jdbc jar 在路径中。您是否正确的日志级别(调试/错误?)?最后 - appender 不记录异常。 logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jdbc/…
  • Postgresql 需要一个点,而不是秒和毫秒之间的逗号。
  • 我把它改成了一个点,但仍然无法正常工作。我在 Eclipse 中也有 jarpath,我也尝试将它放在 bin 文件和项目文件中。
  • 可能是因为我的属性文件顶部没有 log4j.rootCategory 吗?当我放一个时,我得到了错误
  • log4j.properties 是否包含在 jar 中?好像找不到。

标签: java postgresql log4j


【解决方案1】:

您应该将 rootCategory 设置为:

log4j.rootCategory=DEBUG, jbdc

log4j.appender.jdbc=org.apache.log4j.jdbc.JDBCAppender 
log4j.appender.jdbc.driver=org.postgresql.Driver
log4j.appender.jdbc.URL=jdbc:postgresql://MYSERVER:5432/logs 
log4j.appender.jdbc.user=logs
log4j.appender.jdbc.password=MYPASS
log4j.appender.jdbc.sql=INSERT INTO log4j_messages (message, class, priority, log_date) values ('%m', '%c', '%p', to_timestamp('%d', 'YYYY-MM-DD HH24:MI:SS,MS'))

否则记录器将没有附加程序。

【讨论】:

  • 感谢 Hiery 的回答,但是当我运行我的程序时,我从 log4j pastebin.com/k4UPgftk 收到这些错误和警告
  • log4j 属性文件是否真的包含在 jar 或 classpath 中?
  • 我发现了一个叫做 logback 的东西,它是一个改进的 log4j,它的文档记录要好得多,我想我应该让它与它一起工作。
  • 您也可以切换到 slf4j(它是各种记录器的前端)。还有一个默认的 logback 实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 2012-10-08
  • 2015-02-20
  • 2017-09-25
  • 2018-07-10
相关资源
最近更新 更多