容器环境无crontab权限时,如何通过JBoss CLI实现WildFly日志文件的自动定期删除
容器环境无crontab权限时,如何通过JBoss CLI实现WildFly日志文件的自动定期删除
首先,我得先指出你之前配置里的两个核心问题:
- 你用的
periodic-size-rotating-file-handler是按文件大小+时间双条件轮转的处理器,它的max-backup-index参数控制的是备份文件的数量,不是天数——所以设置为3只会保留3个备份文件,和你想要的“3天后自动删除”逻辑不匹配。 - 你创建的
DELETELOG处理器没有被关联到任何日志记录器(logger),所以自然不会有日志写入这个文件。
针对你的需求(容器无crontab,按时间自动删除3天前的日志),推荐使用纯时间轮转的文件处理器periodic-rotating-file-handler,结合max-backup-index来控制保留的天数备份,下面是具体的实现步骤:
1. 创建时间轮转的日志处理器
执行以下JBoss CLI命令,创建一个每天轮转、保留3天备份的处理器:
/subsystem=logging/periodic-rotating-file-handler=TIME_BASED_LOG_DELETER:add( autoflush=true, file={relative-to=>"jboss.server.log.dir", path=>"application.log"}, suffix=>".yyyy-MM-dd", append=>true, max-backup-index=>3, level=>DEBUG )
参数说明:
suffix=".yyyy-MM-dd":指定每天生成一个新的日志文件,旧文件会被重命名为application.log.2024-05-20这种带日期的格式。max-backup-index=3:最多保留3个备份文件(也就是最近3天的日志备份),当第4天到来时,最早的那个备份文件会被自动删除。file配置:指定日志文件路径,关联到WildFly默认的日志目录jboss.server.log.dir。
2. 将处理器关联到目标日志记录器
因为你提到ROOT日志已经在使用FILE处理器且无法移除,你可以选择:
选项A:给ROOT日志添加新的处理器(同时保留原FILE处理器)
/subsystem=logging/root-logger=ROOT:add-handler(name=>TIME_BASED_LOG_DELETER)
这样ROOT日志会同时输出到原FILE和新的TIME_BASED_LOG_DELETER处理器中,新处理器会自动管理3天的日志删除。
选项B:给自定义应用日志单独配置处理器
如果只需要处理你自己应用的日志,而非整个ROOT日志,可以创建一个针对你应用包的日志记录器:
/subsystem=logging/logger=com.yourcompany.app:add(level=>DEBUG, handlers=>["TIME_BASED_LOG_DELETER"])
把com.yourcompany.app替换成你实际的应用代码包路径即可。
3. 验证配置生效
你可以通过以下命令查看配置是否正确:
/subsystem=logging/periodic-rotating-file-handler=TIME_BASED_LOG_DELETER:read-resource
之后等待几天,检查日志目录下的备份文件是否只保留最近3天的,旧文件会被自动清理。
补充说明
如果你的日志量很大,希望同时按大小和时间轮转(比如每天轮转且单个文件不超过10M),可以继续使用periodic-size-rotating-file-handler,但需要根据每天生成的文件数量估算max-backup-index的值。比如每天生成2个10M的文件,要保留3天的话,就设置max-backup-index=6,但这种方式不如纯时间轮转精准。
备注:内容来源于stack exchange,提问作者Hannes Oberberger
相关产品推荐
相关产品推荐

