logrotate は日付でファイル名を変更します

logrotate は日付でファイル名を変更します

現在、logrotate は古いログ ファイルの名前を access.log.1.gz、access.log.2.gz などに変更します。各日ごとに access.log.20090714.gz、access.log.20090715.gz などの名前を付けることをお勧めします。

古いログ ファイルのファイル名パターンを指定するオプションが見つかりません。これを行う方法をご存知ですか?

ちなみに、これは lighttpd ログ ファイルをローテーションするためのものです。

答え1

/etc/logrotate.confまたは/etc/logrotate.d/lighttpd、または他の場所にある場合は適切なファイルで、日付サフィックスを適用するスタンザに を追加しますdateext

詳細情報logrotate マニュアルページ:

日付テキスト

単に数字を追加するのではなく、YYYYMMDD のような日次拡張子を追加して、ログ ファイルの古いバージョンをアーカイブします。

答え2

cronolog を使用します。これにより、最初に正しいファイル名でログファイルが書き込まれます (たとえば、通常、Web サーバーでログファイルを YYYY/MM/DD/access または YYYY/MM/DD/error などとして書き込むようにしています)。lighttpd で cronolog を構成する方法の詳細については、次の URL を参照してください。http://redmine.lighttpd.net/projects/1/wiki/MigratingFromApache

(このページでは server.errorlog は cronolog では実行できないと書かれていますが、これについては「修正済み」とマークされたバグ レポートがあるようです。残念ながら、私は serverfault の「新規」ユーザーなので、一度に複数の URL を投稿することはできません...)

答え3

lighttpd や logrotate だけではこれができないと思います。これを実現するには 2 つの方法があります。

logrotate の直後、たとえば cronjob の最後などで独自のスクリプトを実行します。次のようなものです:

if [ -f /var/log/lighttpd/access.log.1.gz ]; then`
    mv /var/log/lighttpd/access.log.1.gz /var/log/lighttpd/access.log.$date.gz
fi

または、syslog-ng は日付別にログ ファイルを構築し、lighttpd はログを自分で書き込むのではなく、syslog に送信できます。

# syslog-ng.conf
destination df_lighttpd { file("/var/log/lighttpd/$YEAR$MONTH$DAY.log"); };
filter f_lighttpd { program("lighttpd"); };
log { source(s_all);  filter(f_lighttpd); destination(df_lighttpd); };

lighttpd conf でaccesslog.use-syslog&を設定します。server.errorlog-use-syslog


編集:Cronolog は、私の提案のどちらよりもシンプルなので、それがうまくいくなら、それを採用します。

関連情報