
現在、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 は、私の提案のどちらよりもシンプルなので、それがうまくいくなら、それを採用します。