使用 logrotate 轮换 apache 日志
using logrotate to rotate apache logs
我的应用程序 运行 在 apache tomcat 上。我想为 apache 创建的日志配置 logrotate。
我的logrotate配置如下:
/var/company/apache-tomcat/logs/*.log /var/company/apache-tomcat/logs/*.txt {
su root root
copytruncate
compress
dateext
dateformat -%s
extension gz
missingok
notifempty
rotate 90
daily
}
我刚刚意识到我不需要 apache 日志的 copytruncate 选项,因为 apache 似乎每天都会创建一个新的日志文件并附加一个时间戳。
例如:localhost.2016-02-26.log
我希望 logrotate 进入并压缩以前的日志并删除它们(只保留压缩文件)并保持当前日志不变。
附录:
刚刚发现 logrotate 不适合轮转其中包含时间戳的日志。我正在寻找使 logrotate 与此类日志或更适合轮换此类日志的其他轮换实用程序一起工作的方法。
我创建了自己的 bash 脚本来为我执行此操作。它来自 cron 作业 运行,压缩模式文件并删除超过特定天数的文件:
#!/bin/bash
# Compress logs and run garbage collection
ME=$(basename [=10=])
usage() {
echo "Usage:"
echo " $ME <log_path> <garbage_collection_days>"
echo "Example:"
echo " $ME \"/path/to/logfile.log-???????\" 21"
echo
}
# sanity checking
[[ $# -ne 2 ]] && usage && exit 1
file_pattern=""
gc_days=
# compress logfiles that are older than one day
nice -n 10 find $file_pattern -mtime +1 -exec gzip {} \;
# garbage collection
find $(dirname $file_pattern)/*.gz -mtime +$gc_days -exec rm {} \;
我的应用程序 运行 在 apache tomcat 上。我想为 apache 创建的日志配置 logrotate。
我的logrotate配置如下:
/var/company/apache-tomcat/logs/*.log /var/company/apache-tomcat/logs/*.txt {
su root root
copytruncate
compress
dateext
dateformat -%s
extension gz
missingok
notifempty
rotate 90
daily
}
我刚刚意识到我不需要 apache 日志的 copytruncate 选项,因为 apache 似乎每天都会创建一个新的日志文件并附加一个时间戳。
例如:localhost.2016-02-26.log
我希望 logrotate 进入并压缩以前的日志并删除它们(只保留压缩文件)并保持当前日志不变。
附录:
刚刚发现 logrotate 不适合轮转其中包含时间戳的日志。我正在寻找使 logrotate 与此类日志或更适合轮换此类日志的其他轮换实用程序一起工作的方法。
我创建了自己的 bash 脚本来为我执行此操作。它来自 cron 作业 运行,压缩模式文件并删除超过特定天数的文件:
#!/bin/bash
# Compress logs and run garbage collection
ME=$(basename [=10=])
usage() {
echo "Usage:"
echo " $ME <log_path> <garbage_collection_days>"
echo "Example:"
echo " $ME \"/path/to/logfile.log-???????\" 21"
echo
}
# sanity checking
[[ $# -ne 2 ]] && usage && exit 1
file_pattern=""
gc_days=
# compress logfiles that are older than one day
nice -n 10 find $file_pattern -mtime +1 -exec gzip {} \;
# garbage collection
find $(dirname $file_pattern)/*.gz -mtime +$gc_days -exec rm {} \;