log4j JDBCAppender旋转表名称

log4j JDBCAppender旋转表名称,log4j,Log4j,我已经成功地配置了一个应用程序,该应用程序使用log4j进行日志记录,以登录到MySQL数据库。(使用org.apache.log4j.jdbc.jdbcapender) 我还有一些perl应用程序也可以登录到数据库中。我的perl应用程序设置为每个月都更改数据库表的名称(log_2010_11、log_2010_10等)。在每个月底,我在刚刚完成的月份运行报告脚本,将表转储到一个外部文件(该文件被压缩和归档),然后删除该表。这样,日志数据库的总大小保持在合理的范围内 我想对log4j做同样的处

我已经成功地配置了一个应用程序,该应用程序使用log4j进行日志记录,以登录到MySQL数据库。(使用org.apache.log4j.jdbc.jdbcapender)

我还有一些perl应用程序也可以登录到数据库中。我的perl应用程序设置为每个月都更改数据库表的名称(log_2010_11、log_2010_10等)。在每个月底,我在刚刚完成的月份运行报告脚本,将表转储到一个外部文件(该文件被压缩和归档),然后删除该表。这样,日志数据库的总大小保持在合理的范围内

我想对log4j做同样的处理,但是似乎没有适合这个目的的log4j appender

是否可以这样做:

log4j.appender.SQ=org.apache.log4j.jdbc.JDBCRollingAppender

log4j.appender.SQ.Driver=com.mysql.jdbc.Driver

log4j.appender.SQ.URL=jdbc:mysql://localhost:3306/logs_{%year}_{%month}

谢谢。

要做到这一点,您必须编写自己的appender

另一种选择是保留现有appender并执行以下操作:


数据库中有一个名为
log
的表。为什么不制作一个Perl脚本,在每个月底制作一个新表,比如说12月份的
log_12
,将
log
中的所有内容复制到
log_12
,然后删除
log
中的所有内容?这样,您就不必再费心制作另一个appender了。

如何编写一个脚本,每月运行一次,将特定的表转储到备份文件中,然后将其压缩归档。完成后,截断表或删除日期范围内的行。

我想出了方法:

log4j.appender.SQ=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.SQ.Driver=com.mysql.jdbc.Driver
log4j.appender.SQ.URL=jdbc:mysql://localhost:3306/logs
log4j.appender.SQ.sql=INSERT INTO accesslog_%d{yyyy_MM} (date, time, tz, ...
看起来您可以将日期格式字符串放入SQL语句中,JDBCAppender将展开它们并登录到相应的表中


但是,它不会在新月初创建新表,因此目前我必须事先手动创建表,这远远不够理想。

我应该说。日期格式字符串在java.text.simpleDataFormat(标准java库的一部分)中定义