9

TimedRotatingFileHandler を使用して Django のログを記録し、毎日ローテーションしますが、ログ ファイルを確認すると、昨日のログが切り捨てられ、今日のログがほとんど記録されず、昨日のログが失われるという奇妙な問題が発生します。

ジャンゴ 1.4
uwsgi 1.4.9
Python 2.6

uwsgiで8つのdjangoインスタンスを起動します。setting.py は

'handlers': {
    'apilog': {
        'level': 'INFO',
        'class': 'logging.handlers.TimedRotatingFileHandler',
        'filename': os.path.join(APILOG, "apilog.log" ),
        'when': 'midnight',
        'formatter': 'info',
        'interval': 1,
        'backupCount': 0,
    },
 },
 'loggers': {                                                                                                                        
    'apilog': {
        'handlers': ['apilog'],
        'level': 'INFO',
        'propagate': True  
     },
  }

私は何か見落としてますか?古いログが失われるのはなぜですか?

4

1 に答える 1

15

複数のプロセスからファイルベースのハンドラーに同時にログを記録するべきではありません。これは、ポータブル OS のサポートがないため、サポートされていません。

複数のプロセスから 1 つの宛先にログを記録するには、次のいずれかの方法を使用できます。

  • 次のようなものを使用しますConcurrentLogHandler
  • SysLogHandler(またはNTEventLogHandlerWindowsの場合) を使用します。
  • SocketHandlerファイルに書き込むためにログを別のプロセスに送信する a を使用します
  • ここで概説されているように、 aQueueHandlerと一緒に使用します。multiprocessing.Queue
于 2013-09-17T07:14:46.803 に答える