Pythonはロギングモジュールを使用してロギングの例を実装します

ロギングモジュールの概要

ロギングモジュールはPythonの標準ライブラリモジュールです。開発プロセス中に、このモジュールを使用してログ記録を柔軟に完了することができます。
ロギングモジュールは、2つのロギング方法を提供します。

1)ロギングによって提供されるモジュールレベルの関数(logging.basicConfig、logging.debug、logging.info ...)を使用します。
2)ロギングモジュールのコンポーネント(ロガー、ハンドラー、フィルター、フォーマッター)を使用します

Pythonロギングログレベル

表1Pythonのログログレベル
レベル 対応する機能 説明
デバッグ logging.debug() 細部に使用される最低レベル。通常は問題を診断する場合にのみ、これらのメッセージのみを気にします。
情報  logging.info() プログラムの一般的なイベントに関する情報を記録したり、すべてが正しく機能していることを確認したりするために使用されます。
警告  logging.warning() 考えられる問題を示すために使用されます。プログラムの動作を妨げることはありませんが、将来的には発生する可能性があります。
エラー  logging.error() エラーをログに記録するために使用され、プログラムが何かを実行できなくなる原因になります。
重要 logging.critical() プログラムが完全に動作を停止する原因となった、または停止させる致命的なエラーを示すために使用される最高レベル。

インスタンス

import logging
from logging.handlers import TimedRotatingFileHandler

class RecordLogs:
    def __init__(self, log_name, level=20, log_format="%(asctime)s,%(msecs)d %(name)s:%(levelname)s: [%(module)s(%(lineno)d)] %(message)s",
                date_format="%Y-%m-%d %H:%M:%S", console_print=True, log_file=None, when=None):
        self.log_name = log_name
        self.level = level
        self.log_format = log_format
        self.date_format = date_format
        self.console_print = console_print
        self.log_file = log_file
        self.when = when

    def print(self):
        # avoid duplicate printing
        if not self.console_print and not self.log_file:
            print("Error: Save log in file, but input not log file!")
            return
        log_dict = logging.Logger.manager.loggerDict
        print_flag = True if self.log_name not in log_dict else False
        when = None if self.when not in ["S", "M", "H", "D", "midnight"] else self.when
        if not print_flag:
            return
        # create logger
        logger = logging.getLogger(self.log_name)
        logger.setLevel(self.level)
        formatter = logging.Formatter(self.log_format, self.date_format)

        if self.console_print:
            # create handler,output log to console
            log_sh = logging.StreamHandler()
            log_sh.setFormatter(formatter)
            # logger add handler
            logger.addHandler(log_sh)
        if self.log_file:
            if when:
                logHandler = TimedRotatingFileHandler(self.log_file, when=when)
                logHandler.setFormatter(formatter)
                logger.addHandler(logHandler)
            else:
                fh = logging.FileHandler(self.log_file)
                fh.setFormatter(formatter)
                # logger add handler
                logger.addHandler(fh)
        return logger

if __name__ == "__main__":
    import time
    test_log = RecordLogs("log_test", console_print=True, log_file="C:/Users/user/Desktop/test.log", when=None, level=10).print()
    while True:
        test_log.info("info logger")
        test_log.error("error logger")
        test_log.warning("warning logger")
        test_log.debug("debug logger")
        time.sleep(10)
結果:

ここに画像の説明を挿入

総括する:

このモジュールを介してプログラムの実行中に印刷されるログ、特にエラー情報は、トラブルシューティングにとって非常に重要です。そうしないと、プログラムを再実行するたびに手動で実行する必要があり、非常に面倒です。

おすすめ

転載: blog.csdn.net/Lin_Hv/article/details/107663564