首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >log4j JDBCAppender轮转表名称

log4j JDBCAppender轮转表名称
EN

Stack Overflow用户
提问于 2010-12-01 22:04:52
回答 3查看 1.2K关注 0票数 2

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

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

我也想用log4j做同样的事情,但是似乎没有适合这个目的的log4j附加器。

有没有可能这样做:

代码语言:javascript
运行
复制
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}

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-07 22:26:33

我想出了怎么做:

代码语言:javascript
运行
复制
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就会展开它们并登录到对应的表中。

然而,它不会在新的月初创建新的表,所以目前我必须事先手动创建表,这是很不理想的。

票数 1
EN

Stack Overflow用户

发布于 2010-12-01 22:08:11

您必须编写自己的附加器才能做到这一点。

另一种选择是继续使用现有的附加器,并执行以下操作:

您的数据库中有一个名为log的表。为什么不创建一个Perl脚本,在每个月底创建一个新表,假设是12月份的log_12,复制从loglog_12的所有内容,然后删除log中的所有内容?那样的话,你就不用费心去做另一个附加器了。

票数 0
EN

Stack Overflow用户

发布于 2010-12-14 22:56:28

是否可以使用一个脚本每月运行一次,将特定的表转储到一个备份文件中,然后将其压缩以便存档。完成后,截断表或删除日期范围内的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4325141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档