検索
ホームページバックエンド開発Python チュートリアルPythonロギングモジュールのロギング

モジュールレベルの関数

logging.getLogger([name]): ロガーオブジェクトを返します。名前が指定されていない場合は、ルートロガーが返されます

logging.debug()、logging.info()、logging.warning ()、logging.error()、logging.critical(): ルート ロガーのログ レベルを設定します

logging.basicConfig(): デフォルトのフォーマッタを使用してロギング システムの StreamHandler を作成し、基本構成を設定して追加しますルートロガーに送信します

Logger

logging .getLogger([name])

名前が指定されていない場合は、ルートロガーを返します。

すべてのプログラムは、情報を出力する前にロガーを取得する必要があります。ロガーは通常、プログラムのモジュール名に対応します。たとえば、チャット ツールのグラフィカル インターフェイス モジュールは次のようにロガーを取得できます:

LOG=logging.getLogger("chat.gui")

そして、コア モジュールは次のように取得できます。次のように:

LOG=logging .getLogger("chat.kernel")

Logger.setLevel(logging.WARNING): WARNING より低いレベルは無視されます

Logger.addFilter(filt) )、Logger.removeFilter(filt): 指定されたフィルターを追加または削除します

Logger.addHandler(hdlr)、Logger.removeHandler(hdlr): 指定されたハンドラーを追加または削除します

Handlers

handlerオブジェクトが担当します関連情報を指定された宛先に送信します。ファイル、画面、ネットワーク、ソケットなどを指定できます。

Handler.setLevel(lel): 処理する情報のレベルを指定します。 lel レベル未満の情報は無視されます。

Handler.setFormatter(): を選択します。このハンドラーの出力形式

Handler.addFilter(filt)、Handler.removeFilter(filt): フィルターオブジェクトを追加または削除します

ログは画面に出力されます

import logging

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

 

返回:
WARNING:root:This is warning message

打印到屏幕

デフォルトでは、logging はログを画面に出力します

ログ レベルとサイズの関係は次のとおりです。もちろん、ログ レベルを自分で定義することもできます。

ログ出力のフォーマット


logging.basicConfig関数パラメータ:
filename: ログファイル名を指定します
filemode: file関数と同じ意味で、ログファイルを開くモード、'w'または'a'を指定します

format : 出力の形式と内容を指定します。形式は、上の例に示すように、多くの有用な情報を出力できます。

import logging

logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%a, %d %b %Y %H:%M:%S',
                filename='myapp.log',
                filemode='w')
    
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

 

./myapp.log文件中内容为:
Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message

修改输出格式
ログ形式変数

%(levelno)s: 打印日志级别的数值
 %(levelname)s: 打印日志级别名称
 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
 %(filename)s: 打印当前执行程序名
 %(funcName)s: 打印日志的当前函数
 %(lineno)d: 打印日志的当前行号
 %(asctime)s: 打印日志的时间
 %(thread)d: 打印线程ID
 %(threadName)s: 打印线程名称
 %(process)d: 打印进程ID
 %(message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

日志格式
ロギングメソッド

logging.StreamHandler: 日志输出到流,可以是sys.stderr、sys.stdout或者文件
logging.FileHandler: 日志输出到文件

日志回滚方式,实际使用时用RotatingFileHandler和TimedRotatingFileHandler
logging.handlers.BaseRotatingHandler
logging.handlers.RotatingFileHandler
logging.handlers.TimedRotatingFileHandler

logging.handlers.SocketHandler: 远程输出日志到TCP/IP sockets
logging.handlers.DatagramHandler:  远程输出日志到UDP sockets
logging.handlers.SMTPHandler:  远程输出日志到邮件地址
logging.handlers.SysLogHandler: 日志输出到syslog
logging.handlers.NTEventLogHandler: 远程输出日志到Windows NT/2000/XP的事件日志
logging.handlers.MemoryHandler: 日志输出到内存中的制定buffer
logging.handlers.HTTPHandler: 通过"GET"或"POST"远程输出到HTTP服务器

logging方法
StreamHandler と FileHandler は一般的に使用されるログ処理メソッドであるため、 , これらは直接loggingモジュールに含まれていますが、他のメソッドはlogging.handlersモジュールに含まれています

プログラム内でログモジュールを定義

import logging
# create logger
def logger(log_type):
logger = logging.getLogger(log_type) # 创建Logger对象,类型是'TEST-LOG'
logger.setLevel(logging.WARNING) # 设置最低的日志级别,此级别覆盖ch and fh的级别
# 创建输出到控制台处理程序,并设置级别为DEBUG
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 控制输出到屏幕的级别
# 创建输出到文件的处理程序,并设置级别
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# 创建日志格式
formatter_Stream = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
formatter_File = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch and fh
ch.setFormatter(formatter_Stream)
fh.setFormatter(formatter_File)
# add ch and fh to logger
logger.addHandler(ch)
logger.addHandler(fh)
return logger
eee = logger('EEE')
rrr = logger('RRR')
rrr.debug('debug message')
rrr.info('info message')
rrr.warning('warn message')
eee.error('error message')
eee.critical('critical message')

代码
画面表示内容

RRR - INFO - 情報メッセージ

RRR - WARNING -警告メッセージ

EEE - エラー - エラーメッセージ

EEE - クリティカル - クリティカルメッセージ

ファイルの内容


2017-02-21 21:35:05,700 - RRR - 警告 - 警告メッセージ

2017-02- 21 21:35:05,700 - EEE - ERROR - エラー メッセージ


2017-02-21 21:35:05,700 - EEE - CRITICAL - クリティカル メッセージ


Filter


呼び出し時のパラメータの形式logging.getLogger() は「A.B.C」に似ています。この形式はフィルターを構成するために使用されます。フィルタを追加すると、ログは出力前にフィルタによって処理されます。フィルタ「AAA.BBB」では、名前が「AAA.BBB」で始まるロガーのみが情報を出力できます。フィルターが拒否した場合、ログは出力されません

import logging
def logger(log_type):
logger = logging.getLogger(log_type) # 创建Logger对象,类型是'TEST-LOG'
logger.setLevel(logging.DEBUG) # 此级别覆盖ch and fh的级别
# 创建输出到控制台处理程序,并设置级别为DEBUG
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 控制输出到屏幕的级别
 
# 设置过滤器
filter = logging.Filter('AAA.BBB.CCC')
ch.addFilter(filter)
formatter_Stream = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter_Stream)
logger.addHandler(ch) # ch加入logger
return logger
eee = logger('AAA.BBB.CCC')
rrr = logger('AAA.BBB.DDD')
rrr.error('debug message')
rrr.error('info message')
eee.error('critical message')
eee.error('critical message')

代码

ログをカット

サイズでカット

import logging
from logging import handlers
# create logger
def logger(log_type):
logger = logging.getLogger(log_type)
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("access.log")
fh.setLevel(logging.WARNING)
# 按时间切割日志文件
fh = handlers.TimedRotatingFileHandler(filename='access.log', when='s', interval=10 )
formatter_File = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter_File)
logger.addHandler(fh)
return logger
rrr = logger('AAA.BBB.DDD')
rrr.error('debug message')
rrr.error('info message')
rrr.error('warn message')

代码
interval:時間間隔

when:時間単位S秒M分H時間D日W毎週(間隔==0 時間 月曜日) 毎朝午前 0 時を表します


ルートロガーとロガーの親子関係について

ルートロガーについては、これまで何度も触れてきましたが、実は、ロガー インスタンス間の親子関係。ルート ロガーは最上位のロガーであり、すべてのロガーの祖先です。以下に示すように: ロガー インスタンスを作成せず、logging.debug()、logging.info()、logging.warning()、logging.error()、およびlogging.criticalを直接呼び出す場合、ルート ロガーがデフォルトのロガーになります。 () 関数を使用する場合は、ロガーはルート ロガーであり、自動的に作成でき、単一インスタンスでもあります。


ルート ロガーを取得する方法。logging.getLogger() またはlogging.getLogger("") を通じてルート ロガー インスタンスを取得します。
levelroot ロガーのデフォルトのレベルは、logging です。警告
親子関係を表現する方法。ロガー名の命名方法により、ロガー間の親子関係を示すことができます。例:parent_logger =logging.getLogger('foo)。 ')child_logger =logging.getLogger( 'foo.bar')
有効レベルとは Loggerには有効レベルという概念があります。 ロガーが明示的にレベルを設定しない場合、親のレベルが使用されます。父親がレベルを明示的に設定しない場合は、父親の父親のレベルが使用され、以下同様です...最終的にルート ロガーに到達すると、レベルが設定されているはずです。デフォルトは、logging.WARNING です。子ロガーがメッセージを取得すると、そのメッセージをそのハンドラーに配布して処理するだけでなく、処理のためにすべての祖先ロガーにも渡します

Python ログ モジュールのロギング関連記事については、こちらをご覧ください。 PHP 中国語 Web サイトに注意してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PythonスクリプトがUNIXで実行されない可能性がある一般的な理由は何ですか?PythonスクリプトがUNIXで実行されない可能性がある一般的な理由は何ですか?Apr 28, 2025 am 12:18 AM

PythonスクリプトがUNIXシステムで実行できない理由には、次のものが含まれます。1)CHMOD XYOUR_SCRIPT.PYを使用して実行権限を付与する不十分な権限。 2)shebangラインが正しくないか欠落している場合、#!/usr/bin/envpythonを使用する必要があります。 3)環境可変設定が誤っていない場合、OS.Environデバッグを印刷できます。 4)間違ったPythonバージョンを使用して、Shebangラインまたはコマンドラインでバージョンを指定できます。 5)仮想環境を使用して依存関係を分離する依存関係の問題。 6)構文エラー、python-mpy_compileyour_script.pyを使用して検出します。

Pythonアレイを使用することがリストを使用するよりも適切なシナリオの例を挙げてください。Pythonアレイを使用することがリストを使用するよりも適切なシナリオの例を挙げてください。Apr 28, 2025 am 12:15 AM

Pythonアレイの使用は、リストよりも大量の数値データの処理に適しています。 1)配列を保存するメモリを保存します。2)アレイは数値的な値で動作するのが高速です。3)アレイフォースタイプの一貫性、4)アレイはCアレイと互換性がありますが、リストほど柔軟で便利ではありません。

Pythonでリストと配列を使用することのパフォーマンスへの影響は何ですか?Pythonでリストと配列を使用することのパフォーマンスへの影響は何ですか?Apr 28, 2025 am 12:10 AM

listSareのより良い前提条件とmixdatatypes、whilearraysares優れたスナリカル計算砂の砂を大きくしたデータセット。

Numpyは、大きな配列のメモリ管理をどのように処理しますか?Numpyは、大きな配列のメモリ管理をどのように処理しますか?Apr 28, 2025 am 12:07 AM

numpymanagesmemoryforlargearrayseffictificleusing biews、copies、andmemory-mappedfiles.1)rewsinging withotingcopying、directmodifying theoriginalArray.2)copiescanbecreatedwithcopy()methodforpreservingdata.3)Memory-MapplehandLemassiutasedatasetasedatasetasetasetasetasetasedas

モジュールのインポートが必要なのはどれですか:リストまたは配列は?モジュールのインポートが必要なのはどれですか:リストまたは配列は?Apr 28, 2025 am 12:06 AM

listsinpythondonotrequireimportingamodule、whilearrays fromthearraymoduledoneedanimport.1)listsarebuiltin、versatile、andcanholdmixeddatypes.2)araysaremoremory-efficient-fornumerumerumerumerumerumerdatabutでき、対象となるンドベフェフサメタイプ。

どのデータ型をPythonアレイに保存できますか?どのデータ型をPythonアレイに保存できますか?Apr 27, 2025 am 12:11 AM

Pythonlistscanstoreanydatatype,arraymodulearraysstoreonetype,andNumPyarraysarefornumericalcomputations.1)Listsareversatilebutlessmemory-efficient.2)Arraymodulearraysarememory-efficientforhomogeneousdata.3)NumPyarraysareoptimizedforperformanceinscient

Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Apr 27, 2025 am 12:10 AM

heouttemptemptostoreavure ofthewrongdatatypeinapythonarray、yure counteractypeerror.thisduetothearraymodule'sstricttypeeencultionyを使用します

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン