1

アプリケーションを 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 はタイムスタンプが追加された新しいログ ファイルを毎日作成するように見えるため、apache ログの copytruncate オプションは必要ないことに気付きました。

例: localhost.2016-02-26.log

logrotate が入ってきて、以前のログを圧縮して削除し (圧縮されたファイルのみを保持)、現在のログをそのまま残します。

補遺:

logrotate は、タイムスタンプが含まれるログのローテーションには適していないことがわかりました。そのようなログまたはそのようなログのローテーションにより適した他のローテーション ユーティリティで logrotate を機能させる方法を探しています。

4

1 に答える 1

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 {} \;
于 2016-05-27T15:57:03.130 に答える