多くのプログラムではログを記録する必要があり、ログに含まれる情報には通常のプログラム アクセス ログが含まれるほか、エラー、警告、その他の情報出力も含まれる場合があります。Python のログ モジュールは、さまざまな形式で保存できる標準ログ インターフェイスを提供します。記録されたログは、デバッグ、情報、警告、エラー、重大の 5 つのレベルに分類できます。
モジュールの最初の紹介:
#logging初识 import logging logging.warning("user [James] attempted wrong password more than 3 times") logging.critical("server is down") # WARNING:root:user [James] attempted wrong password more than 3 times # CRITICAL:root:server is down
は、最も簡単な方法は、括弧内にある内容が出力された情報であり、ログを記録する場合は、ログレベルの 5 つのレベルを見てみましょう。
#日志打印到文件中 import logging logging.basicConfig(filename="example.log",level=logging.INFO, format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]") # H 24小时格式 I 12小时格式 A 周几完整 a 周几简写 p AM/PM logging.debug("This message should go to the log file") logging.info("So should this") logging.warning("And this ,too")
logging .basicConfig は入力ファイルのパス、入力ログ情報レベル、入力形式を定義し、コードの実行後に形式をカスタマイズできます。以下の情報:
10/31/2016 17:16:17 [Monday] So should this 10/31/2016 17:16:17 [Monday] And this ,tooこのうち、次の文の level=loggin は、ログレベルを INFO に設定することを意味します。つまり、INFO 以上のレベルのログのみがファイルに記録されます。たとえば、最初のログは記録されません。はい、デバッグ ログを記録したい場合は、ログ レベルを DEBUG に変更するだけです。 ログを画面上とファイル ログに同時に印刷したい場合は、 ロギング ライブラリはモジュラー アプローチを採用し、ロガー、ハンドラー、フィルター、フォーマッタなどのコンポーネントのいくつかのカテゴリを提供します。ロガーは、アプリケーション コードが直接使用するインターフェイスを公開します。ハンドラー(ロガーによって作成された) ログ レコードを適切な宛先に送信します。 フィルターは、出力するログ レコードを決定するためのより詳細な機能を提供します。 フォーマッターは、最終出力でのログ レコードのレイアウトを指定します。
#!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian import logging #创建logger logger = logging.getLogger("test_log") #创建logger对象 括号内容随便写 logger.setLevel(logging.INFO) #全局日志级别 ch = logging.StreamHandler() #日志打印到屏幕上 ch.setLevel(logging.DEBUG) #指定ch日志打印级别 fh = logging.FileHandler("access.log") #日志存进文件 fh.setLevel(logging.WARNING) #指定fh日志输入级别 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") #定义日志格式,可写多个 #添加日志格式到ch,fh ch.setFormatter(formatter) fh.setFormatter(formatter) #添加ch,fh到logger中 logger.addHandler(ch) logger.addHandler(fh) logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message')グローバル ログレベルはプログラム全体の最終行です。印刷する場合、ローカル ログ レベルはこれより高くすることはできません。レベルを低くすることはできません 画面印刷情報
2016-10-31 17:23:42,988 - test_log - INFO - info message 2016-10-31 17:23:42,988 - test_log - WARNING - warn message 2016-10-31 17:23:42,988 - test_log - ERROR - error message 2016-10-31 17:23:42,988 - test_log - CRITICAL - critical messageaccess.log:
2016-10-31 17:02:06,223 - test_log - WARNING - warn message 2016-10-31 17:02:06,224 - test_log - ERROR - error message 2016-10-31 17:02:06,224 - test_log - CRITICAL - critical messageすべてのログ形式:
いくつかの重要な形式: %(lineno)d 出力印刷ログ コード行、%(process) d は印刷ログのプロセス ID を出力、%(thread)d は印刷ログのスレッド ID を出力します