使用logrotate旋转apache日志

时间:2016-05-12 15:01:30

标签: tomcat logging logrotate log-rotation

我的应用程序在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。

1 个答案:

答案 0 :(得分:0)

我创建了自己的bash脚本,为我做了这个。它从cron作业运行并压缩模式文件并删除超过特定天数的文件:

#!/bin/bash
# Compress logs and run garbage collection

ME=$(basename $0)

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="${1}"
gc_days=$2

# 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 {} \;