ホームページ  >  記事  >  バックエンド開発  >  Python モジュール: ロギング

Python モジュール: ロギング

高洛峰
高洛峰オリジナル
2016-11-01 12:52:341422ブラウズ

多くのプログラムではログを記録する必要があり、ログに含まれる情報には通常のプログラム アクセス ログが含まれるほか、エラー、警告、その他の情報出力も含まれる場合があります。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 は入力ファイルのパス、入力ログ情報レベル、入力形式を定義し、コードの実行後に形式をカスタマイズできます。以下の情報: Python モジュール: ロギング

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 message

access.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 を出力します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。