3

更新: TimedRotatingFileHandlerを使用すると正しく動作multiprocessingしません。マルチプロセッシング ロギングをどうすればよいですか?

以下のように独自の Logger クラスを作成し、他のすべての Python スクリプトでモジュールとして使用します。

import logging
import logging.handlers

class Logger:
    DEFAULT_LOG_OUTPUT = "/home/haifzhan/"

    def __init__(self, logger_name, log_file_name, log_dir=DEFAULT_LOG_OUTPUT, log_level=logging.DEBUG):
        self.logger = logging.getLogger(logger_name,)
        self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

        #self.file_handler = logging.FileHandler(log_dir + log_file_name)
        file_path = log_dir + log_file_name
        self.file_handler = logging.handlers.TimedRotatingFileHandler(file_path, when='H', backupCount=30)
        self.file_handler.setFormatter(self.formatter)
        self.logger.setLevel(log_level)
        self.logger.addHandler(self.file_handler)

        self.console_handler = logging.StreamHandler()
        self.console_handler.setFormatter(self.formatter)
        self.console_handler.setLevel(logging.DEBUG)
        self.logger.addHandler(self.console_handler)

    def get_logger(self):
        return self.logger

Python スクリプトの先頭で、Logger のインスタンスを作成します。

 `logger = Logger("logger name", "logfile.log", log_dir=LOG_DIR, log_level=logging.INFO).get_logger()`  # always put it at the top of my script

を使用していたときは完全に機能しましたがFileHandler、残念ながら、に切り替えた後はログ行が省略さTimedRotatingFileHandlerれます。ログ ファイルのローテーションは想定どおりに機能しますが、すべての行をログに記録するわけではありません。コンソールのログは正常に機能していますが、どうしてでしょうか?

self.file_handler = logging.FileHandler(log_dir + log_file_name)

self.file_handler = logging.handlers.TimedRotatingFileHandler(file_path, when='H', backupCount=30)

誰でも解決できますか?</p>

4

2 に答える 2