日志的管理,一般包括两大部分
对于自行开发的应用服务,日志的管理可以由开发人员通过日志组件定制化,如logback,log4j等,但对于安装部署的第三方组件如MySQL、nginx、redis等,以及开发引用的第三方组件如nacos,sentinel等,除非组件开放了丰富的日志配置参数,否则将无法按照开发人员的要求管理日志文件。
一些特殊应用服务或组件,如果没有进行特定的配置操作,默认情况下将使日志文件不受控制,为后期清理造成麻烦,常见的有
以上类似情况下,日志将始终在单文件中持续输出,过了一定时间后,日志文件将占用无限大的磁盘存储,对整个系统造成运行故障。
可以使用Linux自带定时工具 crontab + 清理日志脚本的方式,实现定时清理,示例如下
crontab -e
# 定时清理日志,保留最近7天
1 0 * * * find /logs.dir/ -mtime +7 | xargs rm -rf
特别关注
Linux系统下,有些应用服务组件如nginx与MySQL,运行过程中,对日志存储文件将使用文件句柄跟踪,如此会有以下问题:
针对这种情况
对于不方便进行自定义日志管理的应用服务组件,可以自定义脚本维护,可以自行开发应用软件维护,但强联推荐使用Linux系统集成的日志管理工具logrotate,该工具由Linux系统crontab定时调度,支持为相关日志文件(或其他文件)自定义存储规则,但日志内容只能按照应用服务组件的实现输出。
logrotate提供的功能参数很多,比较常用的如下
logrotate具体适用教程:https://www.cdsy.xyz/computer/system/linux/20210305/cd16149312338970.html
MySQL
/data/mysql/log/mysqld.log
{
daily
dateext
dateyesterday
copytruncate
notifempty
missingok
olddir backup
rotate 60
compress
}
nginx
/usr/local/nginx/logs/access.log
/usr/local/nginx/logs/error.log
{
daily
dateext
dateyesterday
copytruncate
notifempty
missingok
olddir backup
rotate 30
compress
}