1

python loggingで Python doc を確認し、いくつかの実験を行ったところ、スタンドがよくわかりません。

初めて次のロールオーバー時刻を計算するとき (ハンドラーが作成されるとき)、既存のログ ファイルの最終変更時刻、または現在の時刻を使用して、次のローテーションがいつ発生するかを計算します。

1 時間ごとのローテーションのローテーション時間は、ログの開始時間 (たとえば 12:23:33 開始) の影響を受け、次のローテーションは 13:23:33 に影響を受けることがわかりました。

コードは次のようになります。

TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False)

ログの開始時刻ではなく、13:00:00 のような 00 分から 1 時間ごとのログ ローテーションを強制的に開始する方法はありますか? すべてのログには、ログ ファイル名が示す時間内のログのみが含まれますか?

4

3 に答える 3

4

のコードを見るとTimedRotatingFileHandler、特定の分の値で強制的に回転させることはできません。ドキュメントによると、次のロールオーバーはlogfile last modification time + interval、ログファイルが既に存在する場合、または存在current time + intervalしない場合に発生します。

しかし、あなたはファイル名を知っているように見えるので、TimedRotatingFileHandler最初にログファイルの最終更新時刻を現在の時刻に設定することでだますことができます:

from    datetime import datetime
import  os, time

thishour = datetime.now().replace(minute = 0, second = 0, microsecond = 0)
timestamp = time.mktime(thishour.timetuple())

# this opens/creates the logfile...
with file(filename, 'a'):
    # ...and sets atime/mtime
    os.utime(filename, (timestamp, timestamp))

TimedRotatingFileHandler(filename, ...)

(未テスト)

于 2013-03-21T11:57:02.563 に答える
1

別の回答も添付します。Python ロギングは WatchedFileHandler をサポートします。これは、ファイル情報が更新されていることが判明した場合に、同じファイル名のログ ファイルを閉じて再度開きます。Linux の logrotate デーモンのように、システム レベルのログ ローテーションとうまく連携します。

于 2013-04-07T12:09:36.883 に答える