我々は、ログファイルを回転させるためにLinux logrotateを使用します。
例:
/location/tomcat/logs/* /location/jboss/log/* {
copytruncate
daily
rotate 10
compress
size 20M
olddir rotated
create 0644 test test
}
LINUXで提供されるコピー切り捨ての定義によると、
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
そのため、循環中にログファイルのデータが失われます。約5〜20秒ほどログが失われたことがわかりました。データを失うことなく同じプロセスを実行する方法/構成はありますか?
答え1
syslog-ngでは、変数を使用して日付などの項目を含めるように出力ファイル名を設定できるため、失われることなく新しい日の午前12時に自動的に新しいファイルの書き込みを開始できることがわかります。
ただし、syslogプログラムをsyslog-ngに変更する必要があります。しかし、柔軟性が必要なようです。
答え2
.set log/entry size を使用するか、以下をlogrotate
使用してログファイルのログ記録と回転から切り替えることができます。journald
systemd-cat -t indentifier cmdline
/etc/systemd/journald.conf
journalctl --vacuum-size=, --vacuum-time=, --vacuum-files=
もう1つの方法は、logrotate
事前回転/後回転機能を使用してサーバーを1日1回停止し、ログを回転してからサーバーを再起動することです。ログの回転時間はsystemdlogrotate.timer
または(ana)cron操作によって異なり、午前4時またはトラフィックがゼロほど低い時間でスケジュールできます。
prerotate
# stop jboss/tomcat server
endscript
daily
rotate 10
compress
size 20M
postrotate
#start servers
endscript
答え3
これが私がログにすることですCatalina
:
/var/log/tomcat/catalina.out {
daily
size 100m
compressext .gz
compress
delaycompress
compressoptions "-9"
dateformat -%Y%m%d-%s
ifempty
copytruncate
prerotate
SIZE=$(stat --printf='%s' /var/log/tomcat/catalina.out)
/bin/bash -c "tail -c +$SIZE -f /var/log/tomcat/catalina.out > /var/log/tomcat/tmp.log" &
endscript
postrotate
pgrep tail | xargs kill -9
cat /var/log/tomcat/tmp.log >> /var/log/tomcat/catalina.out
rm /var/log/tomcat/tmp.log -f
endscript
}
オプションで、コマンド自体の更新間隔を減らすために-s
withを指定できます。そしてオプションを使用しているので、速度が速いです。tail
tail
-c