ロギングモジュールの概要
ロギングモジュールはPythonの標準ライブラリモジュールです。開発プロセス中に、このモジュールを使用してログ記録を柔軟に完了することができます。
ロギングモジュールは、2つのロギング方法を提供します。
1)ロギングによって提供されるモジュールレベルの関数(logging.basicConfig、logging.debug、logging.info ...)を使用します。
2)ロギングモジュールのコンポーネント(ロガー、ハンドラー、フィルター、フォーマッター)を使用します
Pythonロギングログレベル
レベル | 対応する機能 | 説明 |
---|---|---|
デバッグ | 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)
結果:
総括する:
このモジュールを介してプログラムの実行中に印刷されるログ、特にエラー情報は、トラブルシューティングにとって非常に重要です。そうしないと、プログラムを再実行するたびに手動で実行する必要があり、非常に面倒です。