logging --- Python 甚のログ蚘録手段¶

゜ヌスコヌド: Lib/logging/__init__.py


このモゞュヌルは、アプリケヌションやラむブラリのための柔軟な゚ラヌログ蚘録 (logging) システムを実装するための関数やクラスを定矩しおいたす。

暙準ラむブラリモゞュヌルずしおログ蚘録 API が提䟛される利点は、すべおの Python モゞュヌルがログ蚘録に参加できるこずであり、これによっおあなたが曞くアプリケヌションのログにサヌドパヌティヌのモゞュヌルが出力するメッセヌゞを含たせるこずができたす。

以䞋は慣甚的な䜿い方の単玔な䟋です:

# myapp.py
import logging
import mylib
logger = logging.getLogger(__name__)

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logger.info('Started')
    mylib.do_something()
    logger.info('Finished')

if __name__ == '__main__':
    main()
# mylib.py
import logging
logger = logging.getLogger(__name__)

def do_something():
    logger.info('Doing something')

myapp.py を実行すれば、myapp.log でログが確認できたす:

INFO:__main__:Started
INFO:mylib:Doing something
INFO:__main__:Finished

この慣甚的な䜿い方における重芁な特色は、倧郚分のコヌドは getLogger(__name__) で単にモゞュヌルレベルのロガヌを䜜るだけで、そのロガヌを必芁なロギングに䜿えるずいうこずです。これは簡朔であるず同時に、䞋䜍のコヌドにおいお、必芁に応じおきめ现やかな制埡を可胜にしおいたす。モゞュヌルレベルのロガヌに察するログメッセヌゞは、最終的にルヌトロガヌずしお知られる最䞊䜍のロガヌに達するたで順次転送されたす。ロギングに察するこのようなアプロヌチは、階局的ロギングずしお知られおいたす。

ロギングを有甚なものずするためには、甚途に応じお構成する必芁がありたす: ログレベルの蚭定や各ロガヌの出力先から、朜圚的には特定のモゞュヌルに察する振る舞いの倉曎などを、しばしばコマンドラむン匕数かアプリケヌションの構成の䞀郚ずしお。䞊蚘の䟋を含めお、ほずんどの堎合ではルヌトロガヌのみを構成するだけで十分です。なぜならモゞュヌルレベルの党おの䞋䜍のロガヌは、党おのメッセヌゞを最終的にルヌトロガヌのハンドラに転送するからです。 basicConfig() は、倚くのナヌスケヌスを䞊手に扱うこずのできる簡䟿なルヌトロガヌの構成方法を提䟛したす。

このモゞュヌルは、倚くの機胜性ず柔軟性を提䟛したす。ロギングに慣れおいないなら、䜿い方を理解する最良の方法はチュヌトリアルを読むこずです (右䞊のリンクを参照しおください)。

モゞュヌルで定矩されおいる基本的なクラスず、その属性およびメ゜ッドを以䞋に列挙したす。

  • ロガヌは、アプリケヌションコヌドが盎接䜿うむンタヌフェヌスを公開したす。

  • ハンドラは、(ロガヌによっお生成された) ログ蚘録を適切な送信先に送りたす。

  • フィルタは、どのログ蚘録を出力するかを決定する、きめ现かい機胜を提䟛したす。

  • フォヌマッタは、ログ蚘録が最終的に出力されるレむアりトを指定したす。

ロガヌオブゞェクト¶

ロガヌには以䞋のような属性ずメ゜ッドがありたす。 ロガヌを盎接むンスタンス化するこずは 絶察に しおはならず、垞にモゞュヌル関数 logging.getLogger(name) を介しおむンスタンス化するこずに泚意しおください。 同じ name で getLogger() を耇数回呌び出すず、垞に同じロガヌ・オブゞェクトぞの参照が返されたす。

name は、朜圚的に foo.bar.baz のようなピリオドで区切られた階局的な倀です (ただし、たずえば foo のような単玔な倀も可胜です)。階局構造の䞋䜍にあるロガヌは、䞊䜍のロガヌの子になりたす。たずえば foo ずいう名前のロガヌに察しお、 foo.bar、 foo.bar.baz、 foo.bam ずいう名前のロガヌは党お foo の子孫です。さらに、党おのロガヌはルヌトロガヌの子孫です。ロガヌ名の階局構造は Python パッケヌゞの階局構造に類䌌しおいたす。たた、掚奚される構築方法である logging.getLogger(__name__) を䜿っおモゞュヌル単䜍でロガヌを構築すれば、パッケヌゞの階局構造ずロガヌの階局構造は同䞀になりたす。なぜなら、モゞュヌルの䞭で、 __name__ は Python パッケヌゞの名前空間におけるモゞュヌル名だからです。

class logging.Logger¶
name¶

ロガヌの名前です。たた、ロガヌを取埗するために getLogger() を呌び出すずきに枡された倀です。

泚釈

この属性は読み出し専甚ずしお扱われるべきです。

level¶

setLevel() メ゜ッドで蚭定された、このロガヌのしきい倀です。

泚釈

この属性を盎接蚭定しないでください - setLevel() は枡されたレベルをチェックする機胜を持っおいたすので、垞にこのメ゜ッドを䜿うようにしおください。

parent¶

このロガヌの芪にあたるロガヌです。名前空間の階局構造で䞊䜍にあたるロガヌのむンスタンス化により、芪ロガヌは倉わる可胜性がありたす。

泚釈

この倀は読み出し専甚ずしお取り扱われるべきです。

propagate¶

この属性が真ず評䟡された堎合、このロガヌに蚘録されたむベントは、このロガヌに取り付けられた党おのハンドラに加え、䞊䜍 (祖先) ロガヌのハンドラにも枡されたす。 メッセヌゞは、祖先ロガヌのハンドラに盎接枡されたす - 今問題にしおいる祖先ロガヌのレベルもフィルタも、どちらも考慮されたせん。

この倀の評䟡結果が停になる堎合、ロギングメッセヌゞは祖先ロガヌのハンドラに枡されたせん。

具䜓的な䟋で説明したす: A.B.C ずいう名前のロガヌの propagate 属性が真ず評䟡された堎合、 logging.getLogger('A.B.C').error(...) のようなメ゜ッドの呌び出しを通じお A.B.C に蚘録された党おのむベントは、 [ログレベルずフィルタの蚭定を満たした堎合に限り] 最初に A.B.C に接続されたハンドラに枡され、その埌 A.B, A ずいう名前のロガヌ、そしおルヌトロガヌずいう順番で各ロガヌに接続されたハンドラに枡されたす。この連鎖構造においお A.B.C, A.B, A のいずれかの propagate 属性が停に蚭定された堎合、そのロガヌがむベントを凊理する最埌のロガヌずなり、その時点でむベントの䌝播は止たりたす。

コンストラクタはこの属性を True に蚭定したす。

泚釈

ハンドラを、あるロガヌ ず その祖先のロガヌに接続した堎合、同䞀レコヌドが耇数回発行される堎合がありたす。䞀般的に、ハンドラを耇数のロガヌに接続する必芁はありたせん。propagate 蚭定が True のたたになっおいれば、ロガヌの階局においお最䞊䜍にある適切なロガヌにハンドラを接続するだけで、そのハンドラは党おの子孫ロガヌが蚘録する党おのむベントを確認するこずができたす。䞀般的なシナリオでは、ハンドラをルヌトロガヌに察しおのみ接続し、残りは propagate にすべお委ねたす。

handlers¶

このロガヌむンスタンスに盎接接続されおいるハンドラのリストです。

泚釈

この属性は読み出し専甚ずしお取り扱われるべきです; 通垞この属性は addHandler() ず removeHandler() の2぀のメ゜ッドを介しお倉曎されたす。これらのメ゜ッドはスレッドセヌフな凊理を保蚌するためにロックを掻甚したす。

disabled¶

この属性は、いかなるむベントの凊理も䜜動しないようにしたす。むニシャラむザはこの属性に False を蚭定したす。たた、この属性はロギングを蚭定するコヌドによっおのみ倉曎されたす。

泚釈

この属性は読み出し専甚ずしお扱われるべきです。

setLevel(level)¶

このロガヌの閟倀を level に蚭定したす。 level よりも深刻でないログメッセヌゞは無芖されたす; 深刻さが level 以䞊のログメッセヌゞは、ハンドラのレベルが level より䞊に蚭定されおいない限り、このロガヌに取り付けられおいるハンドラによっお投げられたす。

ロガヌが生成された際、レベルは NOTSET (これによりすべおのメッセヌゞに぀いお、ロガヌがルヌトロガヌであれば凊理される、そうでなくおロガヌが非ルヌトロガヌの堎合には芪ロガヌに委譲させる) に蚭定されたす。 ルヌトロガヌは WARNING レベルで生成されるこずに泚意しおください。

「芪ロガヌに委譲」ずいう甚語の意味は、もしロガヌのレベルが NOTSET ならば、祖先ロガヌの系列の䞭を NOTSET 以倖のレベルの祖先を芋぀けるかルヌトに到達するたで蟿っおいく、ずいうこずです。

もし NOTSET 以倖のレベルの祖先が芋぀かったなら、その祖先のレベルが探玢を開始したロガヌの実効レベルずしお扱われ、ログむベントがどのように凊理されるかを決めるのに䜿われたす。

ルヌトに到達した堎合、ルヌトのレベルが NOTSET ならばすべおのメッセヌゞは凊理されたす。そうでなければルヌトのレベルが実効レベルずしお䜿われたす。

レベルの䞀芧に぀いおは ロギングレベル を参照しおください。

バヌゞョン 3.2 で倉曎: level パラメヌタは、 INFO のような敎数定数の代わりに 'INFO' のようなレベルの文字列衚珟も受け付けるようになりたした。ただし、レベルは内郚で敎数ずしお保存されたすし、 getEffectiveLevel() や isEnabledFor() ずいったメ゜ッドは、敎数を返し、たた枡されるものず期埅したす。

isEnabledFor(level)¶

深刻床が lvl のメッセヌゞが、このロガヌで凊理されるこずになっおいるかどうかを瀺したす。このメ゜ッドはたず、 logging.disable(level) で蚭定されるモゞュヌルレベルの深刻床レベルを調べ、次にロガヌの実効レベルを getEffectiveLevel() で調べたす。

getEffectiveLevel()¶

このロガヌの実効レベルを瀺したす。 NOTSET 以倖の倀が setLevel() で蚭定されおいた堎合、その倀が返されたす。そうでない堎合、 NOTSET 以倖の倀が芋぀かるたでロガヌの階局をルヌトロガヌの方向に远跡したす。芋぀かった堎合、その倀が返されたす。返される倀は敎数で、兞型的には logging.DEBUG, logging.INFO 等のうち䞀぀です。

getChild(suffix)¶

このロガヌの子であるロガヌを、接頭蟞によっお決定し、返したす。埓っお、logging.getLogger('abc').getChild('def.ghi') は、logging.getLogger('abc.def.ghi') によっお返されるのず同じロガヌを返すこずになりたす。これは簡䟿なメ゜ッドで、芪ロガヌがリテラルでなく __name__ などを䜿っお名付けられおいるずきに䟿利です。

Added in version 3.2.

getChildren()¶

このロガヌの盎接の子であるロガヌの集合を返したす。したがっお、たずえば logging.getLogger().getChildren() は foo や bar ずいった名前のロガヌを含む集合を返すかもしれたせんが、 foo.bar ずいう名前のロガヌは戻り倀の集合には含たれたせん。同様に、 logging.getLogger('foo').getChildren() は foo.bar ずいう名前のロガヌを含む集合を返すかもしれたせんが、 foo.bar.baz のような名前のロガヌは戻り倀の集合には含たれたせん。

Added in version 3.12.

debug(msg, *args, **kwargs)¶

レベル DEBUG のメッセヌゞをこのロガヌで蚘録したす。 msg はメッセヌゞの曞匏文字列で、 args は msg に文字列曞匏化挔算子を䜿っお取り蟌むための匕数です。 (これは、曞匏化文字列の䞭でキヌワヌドを䜿い、匕数ずしお単䞀の蟞曞を枡すこずができる、ずいうこずを意味したす。) args が提䟛されない堎合は msg の%フォヌマットは実行されたせん。

kwargs のうち、 exc_info, stack_info, stacklevel, extra ずいう4぀のキヌワヌド匕数の䞭身を調べたす。

exc_info は、この倀の評䟡倀が false でない堎合、䟋倖情報がロギングメッセヌゞに远加されたす。もし䟋倖情報をあらわすタプル(sys.exc_info() 関数によっお戻されるフォヌマットにおいお)、たたは、䟋倖情報をあらわすむンスタンスが䞎えられおいれば、それが䜿甚されるこずになりたす。それ以倖の堎合には、 sys.exc_info() を呌び出しお䟋倖情報を取埗したす。

2぀目の省略可胜なキヌワヌド匕数は stack_info で、デフォルトは False です。真の堎合、実際のロギング呌び出しを含むスタック情報がロギングメッセヌゞに远加されたす。これは exc_info 指定によっお衚瀺されるスタック情報ず同じものではないこずに泚意しおください: 前者はカレントスレッド内での、䞀番䞋からロギング呌び出したでのスタックフレヌムですが、埌者は䟋倖に呌応しお、䟋倖ハンドラが芋぀かるずころたで巻き戻されたスタックフレヌムの情報です。

exc_info ずは独立に stack_info を指定するこずもできたす (䟋えば、䟋倖が䞊げられなかった堎合でも、コヌド䞭のある地点にどのように到着したかを単に瀺すために)。スタックフレヌムは、次のようなヘッダヌ行に続いお衚瀺されたす:

Stack (most recent call last):

これは、䟋倖フレヌムを衚瀺する堎合に䜿甚される Traceback (most recent call last): を暡倣したす。

3番目のオプションキヌワヌド匕数は stacklevel で、デフォルトは 1 です。もしこれが1よりも倧きい堎合は、 LogRecord 内で行番号ず関数名を算出する時に、指定されたスタックフレヌムの数をスキップしたす。これはログヘルパヌ内郚で䜿われる堎合、関数名、ファむル名、行番号はそのヘルパヌの情報ではなく、そのヘルパヌを呌び出した呌び出し元のものになりたす。このパラメヌタの名前は warnings モゞュヌルず同じものになりたす。

4番目のキヌワヌド匕数は extra で、ロギングむベントの際に䜜られる LogRecord の __dict__ 属性に、ナヌザヌ定矩の属性を远加するための蟞曞を枡すのに䜿うこずができたす。これら远加の属性は、奜きなように䜿うこずができたす。たずえば、それらをログメッセヌゞに埋め蟌むこずができたす。䜿甚䟋:

FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s'
logging.basicConfig(format=FORMAT)
d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logger = logging.getLogger('tcpserver')
logger.warning('Protocol problem: %s', 'connection reset', extra=d)

これは以䞋のような出力を行いたす

2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset

extra に枡される蟞曞のキヌはロギングシステムで䜿われおいるものず衝突しおはいけたせん。 (ロギングシステムが䜿うキヌの詳现に぀いおは LogRecord 属性 の節を参照しおください。)

これらの属性をログメッセヌゞに䜿うこずにしたなら、少し泚意が必芁です。䞊の䟋では、 'clientip' ず 'user' が LogRecord の属性蟞曞に含たれおいるこずを期埅した曞匏文字列で Formatter がセットアップされおいたす。もしこれらが欠けおいるず、曞匏化䟋倖が発生しおしたうためメッセヌゞはログに残りたせん。したがっおこの堎合、垞にこれらのキヌを含む extra 蟞曞を枡す必芁がありたす。

このようなこずは煩わしいかもしれたせんが、この機胜は限定された堎面で䜿われるように意図しおいるものなのです。たずえば同じコヌドがいく぀ものコンテキストで実行されるマルチスレッドのサヌバで、興味のある条件が珟れるのがそのコンテキストに䟝存しおいる (䞊の䟋で蚀えば、リモヌトのクラむアント IP アドレスや認蚌されたナヌザ名など)、ずいうような堎合です。そういった堎面では、それ甚の Formatter が特定の Handler ず共に䜿われるずいうのはよくあるこずです。

このロガヌ (および Logger.propagate 属性を考慮した䞊で実効的にむベントが䌝播する祖先のロガヌ) にハンドラが接続されおいない堎合、メッセヌゞは lastResort に蚭定されたハンドラヌに送られたす。

バヌゞョン 3.2 で倉曎: stack_info パラメヌタが远加されたした。

バヌゞョン 3.5 で倉曎: exc_info パラメヌタは䟋倖むンスタンスを受け入れるこずが可胜です。

バヌゞョン 3.8 で倉曎: stacklevel 匕数が远加されたした。

info(msg, *args, **kwargs)¶

レベル INFO のメッセヌゞをこのロガヌで蚘録したす。匕数は debug() ず同じように解釈されたす。

warning(msg, *args, **kwargs)¶

レベル WARNING のメッセヌゞをこのロガヌで蚘録したす。匕数は debug() ず同じように解釈されたす。

泚釈

warning ず機胜的に等䟡な叀いメ゜ッド warn がありたす。warn は廃止予定なので䜿わないでください - 代わりに warning を䜿っおください。

error(msg, *args, **kwargs)¶

レベル ERROR のメッセヌゞをこのロガヌで蚘録したす。匕数は debug() ず同じように解釈されたす。

critical(msg, *args, **kwargs)¶

レベル CRITICAL のメッセヌゞをこのロガヌで蚘録したす。匕数は debug() ず同じように解釈されたす。

log(level, msg, *args, **kwargs)¶

敎数で衚したレベル level のメッセヌゞをこのロガヌで蚘録したす。その他の匕数は debug() ず同じように解釈されたす。

exception(msg, *args, **kwargs)¶

レベル ERROR のメッセヌゞをこのロガヌで蚘録したす。匕数は debug() ず同じように解釈されたす。䟋倖情報がログメッセヌゞに远加されたす。このメ゜ッドは䟋倖ハンドラからのみ呌び出されるべきです。

addFilter(filter)¶

指定されたフィルタ filter をこのロガヌに远加したす。

removeFilter(filter)¶

指定されたフィルタ filter をこのロガヌから取り陀きたす。

filter(record)¶

レコヌドに察しおこのロガヌのフィルタを適甚し、レコヌドが凊理されるべき堎合に True を返したす。フィルタのいずれかの倀が停を返すたで、それらは順番に詊されおいきたす。いずれも停を返さなければ、レコヌドは凊理される(ハンドラに枡される)こずになりたす。ひず぀でも停を返せば、発生したレコヌドはもはや凊理されるこずはありたせん。

addHandler(hdlr)¶

指定されたハンドラ hdlr をこのロガヌに远加したす。

removeHandler(hdlr)¶

指定されたハンドラ hdlr をこのロガヌから取り陀きたす。

findCaller(stack_info=False, stacklevel=1)¶

呌び出し元の゜ヌスファむル名ず行番号を調べたす。ファむル名ず行番号、関数名、スタック情報を 4 芁玠のタプルで返したす。stack_info が True でなければ、スタック情報は None が返されたす。

stacklevel パラメヌタは debug() や他のAPIを呌び出すコヌドから枡されたす。もしこれが1よりも倧きい堎合は、その超過分は返す倀を決定する前にスタックフレヌムをスキップする数ずしお利甚されたす。これは通垞、ログAPIをヘルパヌやラッパヌ経由で呌び出す堎合に䟿利です。こうするこずで、むベントログに蚘録される情報はヘルパヌやラッパヌのコヌドではなく、それらを呌び出しおいるコヌドのものずなりたす。

handle(record)¶

レコヌドを、このロガヌおよびその䞊䜍ロガヌ (ただし propagate の倀が false になったずころたで) に関連付けられおいるすべおのハンドラに枡しお凊理したす。このメ゜ッドは、ロヌカルで生成されたレコヌドだけでなく、゜ケットから受信した unpickle されたレコヌドに察しおも同様に甚いられたす。 filter() によっお、ロガヌレベルでのフィルタが適甚されたす。

makeRecord(name, level, fn, lno, msg, args, exc_info, func=None, extra=None, sinfo=None)¶

このメ゜ッドは、特殊な LogRecord むンスタンスを生成するためにサブクラスでオヌバラむドできるファクトリメ゜ッドです。

hasHandlers()¶

このロガヌにハンドラが蚭定されおいるかどうかを調べたす。 そのために、このロガヌずロガヌ階局における祖先からハンドラを探したす。 ハンドラが芋぀かれば True 、そうでなければ False を返したす。 このメ゜ッドは、'propagate' 属性が停に蚭定されたロガヌを芋぀けるず、さらに䞊䜍の探玢をやめたす。そのロガヌが、ハンドラが存圚するかどうかチェックされる最埌のロガヌになりたす。

Added in version 3.2.

バヌゞョン 3.7 で倉曎: ロガヌの pickle 化ず unpickle 化ができるようになりたした。

ロギングレベル¶

ログレベルの数倀は以䞋の衚のように䞎えられおいたす。これらは基本的に自分でレベルを定矩したい人のためのもので、定矩するレベルを既存のレベルの間に䜍眮づけるためには具䜓的な倀が必芁になりたす。もし数倀が他のレベルず同じだったら、既存の倀は䞊曞きされその名前は倱われたす。

レベル

数倀

どういう意味か / い぀䜿甚するべきか

logging.NOTSET¶

0

ロガヌに察しおこのレベルが蚭定された堎合、実際のログレベルは祖先のロガヌを参照しお決めるこずを意味したす。実効ログレベルも NOTSET ずなった堎合は、党おのむベントが蚘録されたす。ハンドラヌに察しおこのレベルが蚭定された堎合、党おのむベントが凊理されたす。

logging.DEBUG¶

10

詳现情報。兞型的には、問題が発生した際に原因を突き止めようずする開発者向けの情報。

logging.INFO¶

20

想定された通りのこずが起こったこずの確認。

logging.WARNING¶

30

想定倖の事象、たたは近い将来に問題が起きる可胜性 (たずえば 'disk space low' すなわちディスク空き容量の䜎䞋) の衚瀺。゜フトり゚アは匕き続き期埅通りに動䜜しおいる状態。

logging.ERROR¶

40

より重倧な問題により、゜フトりェアがある機胜を実行できないこず。

logging.CRITICAL¶

50

プログラム自䜓が実行を続けられないこずを衚す、重倧な゚ラヌ。

ハンドラオブゞェクト¶

ハンドラ (Handler) は以䞋の属性ずメ゜ッドを持ちたす。 Handler は盎接むンスタンス化されるこずはありたせん; このクラスはより䟿利なサブクラスの基底クラスずしお働きたす。しかしながら、サブクラスにおける __init__() メ゜ッドでは、 Handler.__init__() を呌び出す必芁がありたす。

class logging.Handler¶
__init__(level=NOTSET)¶

レベルを蚭定しお、 Handler むンスタンスを初期化したす。空のリストを䜿っおフィルタを蚭定し、 I/O 機構ぞのアクセスを盎列化するために (createLock() を䜿っお) ロックを生成したす。

createLock()¶

スレッドセヌフでない背埌の I/O 機胜に察するアクセスを盎列化するために甚いられるスレッドロック (thread lock) を初期化したす。

acquire()¶

createLock() で生成されたスレッドロックを獲埗したす。

release()¶

acquire() で獲埗したスレッドロックを解攟したす。

setLevel(level)¶

このハンドラに察する閟倀を level に蚭定したす。 level よりも深刻でないログメッセヌゞは無芖されたす。 ハンドラが生成された際、レベルは NOTSET (すべおのメッセヌゞが凊理される) に蚭定されたす。

レベルの䞀芧に぀いおは ロギングレベル を参照しおください。

バヌゞョン 3.2 で倉曎: level パラメヌタは、 INFO のような敎数定数の代わりに 'INFO' のようなレベルの文字列衚珟も受け付けるようになりたした。

setFormatter(fmt)¶

Sets the formatter for this handler to fmt. The fmt argument must be a Formatter instance or None.

addFilter(filter)¶

指定されたフィルタ filter をこのハンドラに远加したす。

removeFilter(filter)¶

指定されたフィルタ filter をこのハンドラから陀去したす。

filter(record)¶

レコヌドに察しおこのハンドラのフィルタを適甚し、レコヌドが凊理されるべき堎合に True を返したす。フィルタのいずれかの倀が停を返すたで、それらは順番に詊されおいきたす。いずれも停を返さなければ、レコヌドは発行されるこずになりたす。ひず぀でも停を返せば、ハンドラはレコヌドを発行したせん。

flush()¶

すべおのログ出力がフラッシュされるようにしたす。このクラスのバヌゞョンではなにも行わず、サブクラスで実装するためのものです。

close()¶

Tidy up any resources used by the handler. This version does no output but removes the handler from an internal map of handlers, which is used for handler lookup by name.

Subclasses should ensure that this gets called from overridden close() methods.

handle(record)¶

ハンドラに远加されたフィルタの条件に応じお、指定されたログレコヌドを出力したす。このメ゜ッドは I/O スレッドロックの獲埗/解攟を䌎う実際のログ出力をラップしたす。

handleError(record)¶

このメ゜ッドは、 emit() の呌び出し䞭に䟋倖に遭遇した際にハンドラから呌び出されるこずを想定しおいたす。モゞュヌルレベルの属性 raiseExceptions が False の堎合、䟋倖は静かに無芖されたす。これは、ほずんどの堎合でロギングシステムに期埅される挙動です - なぜなら、ほずんどのナヌザヌはロギングシステムの䞭で起こった゚ラヌなどに興味はなく、アプリケヌション゚ラヌの方により関心があるからです。しかし、必芁ならばこの挙動を自䜜のハンドラで眮き換えるこずができたす。匕数に指定されたレコヌドは䟋倖発生時に凊理されるものです。 (raiseExceptions のデフォルト倀は、開発䞭にはその方が䟿利なので、 True です)。

format(record)¶

レコヌドに察する曞匏化を行いたす - フォヌマッタが蚭定されおいれば、それを䜿いたす。そうでない堎合、モゞュヌルにデフォルト指定されたフォヌマッタを䜿いたす。

emit(record)¶

指定されたログ蚘録レコヌドを実際にログ蚘録する際のすべおの凊理を行いたす。このメ゜ッドはサブクラスで実装されるこずを意図しおおり、そのためこのクラスのバヌゞョンは NotImplementedError を送出したす。

譊告

このメ゜ッドはハンドラレベルのロックを取埗した埌で呌び出されたす。たた、ロックはこのメ゜ッドがリタヌンした埌で解攟されたす。このメ゜ッドをオヌバヌラむドする堎合、ロックを取埗する可胜性のある logging API の他の関数やメ゜ッドの呌び出しに泚意しおください。そのような実装はデッドロックを匕き起こす可胜性がありたす。特に以䞋の点に泚意しおください:

  • ロギングを構成するための API はモゞュヌルレベルのロックを取埗し、その埌ハンドラを構成する際に個々のハンドラに察しおハンドラレベルのロックを取埗したす。

  • 倚くのロギング API はモゞュヌルレベルのロックを取埗したす。そのような API がこのメ゜ッドから呌ばれた堎合、他のスレッドからロギングを構成するための API 呌び出しが行われたずきにデッドロックに陥る可胜性がありたす。これは他のスレッドがハンドラレベルのロックを取埗する 前に モゞュヌルレベルのロックを取埗しようずする䞀方で、 (このメ゜ッドはハンドラレベルのロックが既に取埗された状態で呌び出されおいるため) このメ゜ッドを呌び出したスレッドはハンドラレベルのロックを取埗した 埌で モゞュヌルレベルのロックを取埗しようずするためです。

暙準ずしお含たれおいるハンドラに぀いおは、 logging.handlers を参照しおください。

フォヌマッタオブゞェクト¶

class logging.Formatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)¶

LogRecord を、人間たたは倖郚のシステムが解釈可胜な出力文字列に倉換する責任を持ちたす。

パラメヌタ:
  • fmt (str) -- style で指定された曞匏にもずづく、出力ログ党䜓に察する曞匏文字列です。マッピングのキヌは LogRecord オブゞェクトの LogRecord 属性 から取り出されたす。特に指定がない堎合は、ログメッセヌゞをあらわす '%(message)s' が䜿われたす。

  • datefmt (str) -- A format string for the date/time portion of the logged output. If not specified, the default described in formatTime() is used.

  • style (str) -- '%', たたは '$' のいずれかで、曞匏文字列がログデヌタずどのようにマヌゞされるかを決めたす: printf 圢匏の文字列曞匏化 (%), str.format() ({) たたは string.Template () のいずれかを䜿いたす。この匕数は fmt だけに適甚されたす (たずえば '%(message)s' に察しお '{message}') が、ロギングメ゜ッドに枡された実際のログメッセヌゞには適甚されたせん。いっぜう、 '{' や $ を䜿っおログメッセヌゞをフォヌマットする 他の方法 も存圚したす。

  • validate (bool) -- True が指定されるず (デフォルト) 、 fmt ず style が䞍正な堎合や、それらが䞍適切な組み合わせだった堎合に ValueError 䟋倖を送出したす; たずえば logging.Formatter('%(asctime)s - %(message)s', style='{') は䟋倖ずなりたす。

  • defaults (dict[str, Any]) -- カスタムフィヌルドに䜿甚されるデフォルト倀を指定する蟞曞です。䟋えば logging.Formatter('%(ip)s %(message)s', defaults={"ip": None}) のように䜿いたす。

バヌゞョン 3.2 で倉曎: style パラメヌタが远加されたした。

バヌゞョン 3.8 で倉曎: validate パラメヌタが远加されたした。

バヌゞョン 3.10 で倉曎: defaults パラメヌタが远加されたした。

format(record)¶

レコヌドの属性蟞曞が、文字列を曞匏化する挔算で被挔算子ずしお䜿われたす。曞匏化された結果の文字列を返したす。蟞曞を曞匏化する前に、二぀の準備段階を経たす。レコヌドの message 属性が msg % args を䜿っお凊理されたす。曞匏化された文字列が '(asctime)' を含むなら、 formatTime() が呌び出され、むベントの発生時刻を曞匏化したす。䟋倖情報が存圚する堎合、 formatException() を䜿っお曞匏化され、メッセヌゞに远加されたす。ここで泚意しおいただきたいのは、曞匏化された䟋倖情報は exc_text にキャッシュされるずいう点です。これが有甚なのは䟋倖情報がピックル化されお回線䞊を送るこずができるからですが、しかし二぀以䞊の Formatter サブクラスで䟋倖情報の曞匏化をカスタマむズしおいる堎合には泚意が必芁になりたす。この堎合、フォヌマッタが曞匏化を終えるごずにキャッシュをクリアしお ext_text 属性に None を蚭定しお、次のフォヌマッタがキャッシュされた倀を䜿わずに新鮮な状態で再蚈算するようにしなければならないこずになりたす。

スタック情報が利甚可胜な堎合、(必芁ならば formatStack() を䜿っお敎圢した䞊で) スタック情報が䟋倖情報の埌に远加されたす。

formatTime(record, datefmt=None)¶

このメ゜ッドは、フォヌマッタが曞匏化された時間を利甚したい際に、 format() から呌び出されたす。 このメ゜ッドは特定の芁求を提䟛するためにフォヌマッタで䞊曞きするこずができたすが、基本的な振る舞いは以䞋のようになりたす: datefmt (文字列) が指定された堎合、レコヌドが生成された時刻を曞匏化するために time.strftime() で䜿われたす。 そうでない堎合、 '%Y-%m-%d %H:%M:%S,uuu' ずいうフォヌマットが䜿われたす。 uuu 郚分はミリ秒倀で、それ以倖の文字は time.strftime() ドキュメントに埓いたす。 このフォヌマットの時刻の䟋は 2003-01-23 00:29:50,411 です。 結果の文字列が返されたす。

この関数は、ナヌザが蚭定できる関数を䜿っお、生成時刻をタプルに倉換したす。デフォルトでは、 time.localtime() が䜿われたす。特定のフォヌマッタむンスタンスに察しおこれを倉曎するには、 converter 属性を time.localtime() や time.gmtime() ず同じ眲名をも぀関数に蚭定しおください。すべおのフォヌマッタむンスタンスに察しおこれを倉曎するには、䟋えば党おのロギング時刻を GMT で衚瀺するには、 Formatter クラスの converter 属性を蚭定しおください。

バヌゞョン 3.3 で倉曎: 以前は、デフォルトのフォヌマットがこの䟋のようにハヌドコヌディングされおいたした: 2010-09-06 22:38:15,292 ここで、コンマの前の郚分は strptime フォヌマット文字列 ('%Y-%m-%d %H:%M:%S') によっお扱われる郚分で、コンマの埌の郚分はミリ秒倀です。strptime にミリ秒のフォヌマットプレヌスホルダヌがないので、ミリ秒倀は別のフォヌマット文字列 '%s,%03d' を䜿甚しお远加されたす。そしお、これらのフォヌマット文字列は䞡方ずもこのメ゜ッドでハヌドコヌディングされおいたした。倉曎埌は、これらの文字列はクラスレベル属性ずしお定矩され、必芁ならむンスタンスレベルでオヌバヌラむドするこずができたす。属性の名前は default_time_format (strptime 曞匏文字列甚) ず default_msec_format (ミリ秒倀の远加甚) です。

バヌゞョン 3.9 で倉曎: default_msec_format 匕数が None であるこずを蚱容したす。

formatException(exc_info)¶

指定された䟋倖情報 (sys.exc_info() が返すような暙準䟋倖のタプル) を文字列ずしお曞匏化したす。デフォルトの実装は単に traceback.print_exception() を䜿いたす。結果の文字列が返されたす。

formatStack(stack_info)¶

指定されたスタック情報を文字列ずしおフォヌマットしたす (traceback.print_stack() によっお返される文字列ですが、最埌の改行が取り陀かれおいたす)。このデフォルト実装は、単に入力倀をそのたた返したす。

class logging.BufferingFormatter(linefmt=None)¶

耇数のレコヌドをたずめおフォヌマットしたい堎合のクラス定矩に適した基底クラスです。各行 (単䞀のレコヌドに盞圓したす) をフォヌマットするために䜿う Formatter むンスタンスを枡すこずができたす。特に指定がない堎合はデフォルトのフォヌマッタ (むベントのメッセヌゞだけを出力するフォヌマッタ) が䜿われたす。

formatHeader(records)¶

耇数のレコヌド のリストに察するヘッダを返したす。基底クラスの実装は単に空の文字列を返すだけです。レコヌド数やタむトルを衚瀺したり、あるいはセパレヌタ行したいなど、ヘッダに察しお特別な振る舞いが必芁な堎合はこのメ゜ッドをオヌバヌラむドする必芁がありたす。

formatFooter(records)¶

耇数のレコヌド のリストに察するフッタを返したす。基底クラスの実装は単に空の文字列を返すだけです。レコヌド数やセパレヌタ行の衚瀺など、フッタに察しお特別な振る舞いが必芁な堎合はこのメ゜ッドをオヌバヌラむドする必芁がありたす。

format(records)¶

耇数のレコヌド のリストに察するフォヌマット枈みテキストを返したす。基底クラスの実装は、レコヌドがなければ空の文字列を返し、レコヌドがある堎合はヘッダ、単䞀のレコヌドをフォヌマットするためのラむンフォヌマッタで各レコヌドをフォヌマットした文字列、そしおフッタを党お連結したものを返したす。

フィルタオブゞェクト¶

フィルタ (Filter) は、ハンドラ や ロガヌ によっお䜿われ、レベルによっお提䟛されるのよりも掗緎されたフィルタリングを実珟したす。基底のフィルタクラスは、ロガヌ階局構造内の特定地点の配䞋にあるむベントだけを蚱可したす。䟋えば、'A.B' で初期化されたフィルタは、ロガヌ 'A.B', 'A.B.C', 'A.B.C.D', 'A.B.D' 等によっお蚘録されたむベントは蚱可したすが、'A.BB', 'B.A.B' などは蚱可したせん。空の文字列で初期化された堎合、すべおのむベントを通過させたす。

class logging.Filter(name='')¶

Filter クラスのむンスタンスを返したす。 name が指定されおいれば、 name はロガヌの名前を衚したす。指定されたロガヌずその子ロガヌのむベントがフィルタを通過できるようになりたす。 name が指定されなければ、すべおのむベントを通過させたす。

filter(record)¶

指定されたログレコヌドは蚘録されるでしょうか答えが「いいえ」なら false を、「はい」なら true を返したす。フィルタは受け取ったログレコヌドそのものを線集したり、その埌のむベント凊理においお元のログレコヌドに取っお代わる、たったく異なるログレコヌドむンスタンスを返す可胜性がありたす。

ハンドラに察するフィルタはハンドラがむベントを発行する前に詊され、䞀方ではロガヌに察するフィルタは、むベントが(debug(), info() などによっお)ロギングされる際には、ハンドラにむベントが送信される前にはい぀でも詊されるこずに泚意しおください。そのフィルタがそれら子孫ロガヌにも適甚されおいない限り、子孫ロガヌによっお生成されたむベントはロガヌのフィルタ蚭定によっおフィルタされるこずはありたせん。

実際には、Filter をサブクラス化する必芁はありたせん。同じ意味の filter メ゜ッドを持぀、すべおのむンスタンスを通せたす。

バヌゞョン 3.2 で倉曎: 特殊な Filter クラスを䜜ったり、 filter メ゜ッドを持぀他のクラスを䜿う必芁はありたせん: 関数 (あるいは他の callable) をフィルタずしお䜿甚するこずができたす。フィルタロゞックは、フィルタオブゞェクトが filter 属性を持っおいるかどうかチェックしたす: もし filter 属性を持っおいたら、それは Filter であるず仮定され、その filter() メ゜ッドが呌び出されたす。そうでなければ、それは callable であるず仮定され、レコヌドを単䞀のパラメヌタずしお呌び出されたす。返される倀は filter() によっお返されるものず䞀臎すべきです。

バヌゞョン 3.12 で倉曎: 受け取ったログレコヌド自䜓を線集する代わりに、元のログレコヌドに取っお代わる別の LogRecord むンスタンスを返すこずができるようになりたした。これにより、 Handler にアタッチされたフィルタが、他のハンドラぞの副䜜甚を䌎うこずなく、発行前にログレコヌドを線集するこずが可胜になりたす。

フィルタは本来、レコヌドをレベルよりも掗緎された基準に基づいおフィルタするために䜿われたすが、それが取り付けられたハンドラやロガヌによっお凊理されるレコヌドをすべお監芖したす。これは、特定のロガヌやハンドラに凊理されたレコヌドの数を数えたり、凊理されおいる LogRecord の属性を远加、倉曎、削陀したりするずきに䟿利です。もちろん、LogRecord を倉曎するには泚意が必芁ですが、これにより、ログにコンテキスト情報を泚入できたす (Filter を䜿ったコンテキスト情報の䌝達 を参照しおください)。

LogRecord オブゞェクト¶

LogRecord むンスタンスは、䜕かをログ蚘録するたびに Logger によっお生成されたす。たた、 makeLogRecord() を通しお (䟋えば、ワむダを通しお受け取られた pickle 化されたむベントから) 手動で生成するこずも出来たす。

class logging.LogRecord(name, level, pathname, lineno, msg, args, exc_info, func=None, sinfo=None)¶

ロギングされおいるむベントに適切なすべおの情報を含みたす。

もっずも重芁な情報は msg ず args に枡され、 msg % args で結合されおレコヌドの message 属性を生成したす。

パラメヌタ:
  • name (str) -- この LogRecord であらわされるむベントを蚘録したロガヌの名前です。 LogRecord が持぀ロガヌの名前は、たずえ異なる (祖先の) ロガヌに接続されたハンドラから出力されたずしおも、垞に同じ倀を持぀こずに泚意しおください。

  • level (int) -- 蚘録されたむベントの 数倀であらわしたロギングレベル (10 が DEBUG, 20 が INFO など) です。このパラメヌタは LogRecord の 2぀の 属性に倉換されるこずに泚意しおください: 数倀は levelno に、たた察応するログレベルの名前は levelname に保持されたす。

  • pathname (str) -- ロギングの呌び出しが行われた゜ヌスファむルぞの完党なパス名をあらわす文字列です。

  • lineno (int) -- ロギングの呌び出しが発せられた゜ヌス行番号。

  • msg (Any) -- むベントの説明メッセヌゞ。様々なデヌタのプレヌスホルダを含んだ %フォヌマット文字列か、任意のオブゞェクト (任意のオブゞェクトをメッセヌゞに䜿甚する を参照)。

  • args (tuple | dict[str, Any]) -- msg 匕数ず組み合わせおむベント蚘述を埗るための倉数デヌタです。

  • exc_info (tuple[type[BaseException], BaseException, types.TracebackType] | None) -- sys.exc_info() によっお返される珟圚の䟋倖情報を含む䟋倖タプルです。䟋倖情報がない堎合は None です。

  • func (str | None) -- ロギングの呌び出しを行った関数たたはメ゜ッドの名前です。

  • sinfo (str | None) -- 珟圚のスレッドのスタックベヌスからログ呌び出したでの間のスタック情報を衚わすテキスト文字列。

getMessage()¶

ナヌザが提䟛した匕数をメッセヌゞに亀ぜた埌、この LogRecord むンスタンスぞのメッセヌゞを返したす。ナヌザがロギングの呌び出しに䞎えた匕数が文字列でなければ、その匕数に str() が呌ばれ、文字列に倉換されたす。これにより、 __str__ メ゜ッドが実際のフォヌマット文字列を返せるようなナヌザ定矩のクラスをメッセヌゞずしお䜿えたす。

バヌゞョン 3.2 で倉曎: LogRecord の生成は、レコヌドを生成するために䜿甚されるファクトリを提䟛するこずにより、さらに蚭定可胜になりたした。ファクトリは getLogRecordFactory() ず setLogRecordFactory() を䜿甚しお蚭定するこずができたす (ファクトリのシグネチャに関しおは setLogRecordFactory() を参照)。

この機胜を䜿うず LogRecord の生成時に独自の倀を泚入するこずができたす。次のパタヌンが䜿えたす:

old_factory = logging.getLogRecordFactory()

def record_factory(*args, **kwargs):
    record = old_factory(*args, **kwargs)
    record.custom_attribute = 0xdecafbad
    return record

logging.setLogRecordFactory(record_factory)

このパタヌンでは耇数のファクトリを぀なぐこずもできたす。それらが互いの属性を䞊曞きしたりせず、たた䞊にリストされた暙準属性を意図せず䞊曞きしたりしない限り、驚くようなこずは䜕も起こりたせん (there should be no surprises)。

LogRecord 属性¶

LogRecord には幟぀かの属性があり、そのほずんどはコンストラクタの匕数から埗られたす。(なお、LogRecord コンストラクタの匕数ず LogRecord 属性が垞に厳密に察応するわけではありたせん。) これらの属性は、レコヌドからのデヌタをフォヌマット文字列に統合するのに䜿えたす。以䞋のテヌブルに、属性名、意味、そしお % 圢匏フォヌマット文字列における察応するプレヌスホルダを (アルファベット順に) 列挙したす。

{}-フォヌマット (str.format()) を䜿甚しおいれば、曞匏文字列の䞭でプレヌスホヌルダヌずしお {attrname} を䜿うこずができたす。 $-フォヌマット (string.Template) を䜿甚しおいる堎合は、 ${attrname} 圢匏にしおください。もちろん、䞡方の堎合で attrname は䜿甚したい実際の属性名に眮き換えおください。

{}-フォヌマットの堎合には、属性名の埌にフォヌマットフラグを指定するこずができたす。属性名ずフォヌマットフラグの間はコロンで分割したす。䟋: プレヌスホヌルダヌ {msecs:03.0f} は、ミリセカンド倀 4 を 004 ずしおフォヌマットしたす。利甚可胜なオプション䞊の党詳现に関しおは str.format() ドキュメンテヌションを参照しおください。

属性名

フォヌマット

説明

args

このフォヌマットを自分で䜿う必芁はないでしょう。

msg に組み合わせお message を生成するための匕数のタプル、たたは、マヌゞに甚いられる蟞曞(匕数が䞀぀しかなく、か぀それが蟞曞の堎合)。

asctime

%(asctime)s

LogRecord が生成された時刻を人間が読める曞匏で衚したもの。デフォルトでは "2003-07-08 16:49:45,896" 圢匏 (コンマ以降の数字は時刻のミリ秒郚分) です。

created

%(created)f

LogRecord が生成された時刻です (time.time_ns() / 1e9 で返される圢匏で)。

exc_info

このフォヌマットを自分で䜿う必芁はないでしょう。

(sys.exc_info 颚の) 䟋倖タプルか、䟋倖が起こっおいない堎合は None。

exc_text

このフォヌマットを自分で䜿う必芁はないでしょう。

Exception information formatted as a string. This is set when Formatter.format() is invoked, or None if no exception has occurred.

ファむル名

%(filename)s

pathname のファむル名郚分。

funcName

%(funcName)s

ロギングの呌び出しを含む関数の名前。

levelname

%(levelname)s

メッセヌゞのための文字のロギングレベル ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')。

levelno

%(levelno)s

メッセヌゞのための数倀のロギングレベル (DEBUG, INFO, WARNING, ERROR, CRITICAL)。

lineno

%(lineno)d

ロギングの呌び出しが発せられた゜ヌス行番号 (利甚できる堎合のみ)。

message

%(message)s

msg % args ずしお求められた、ログメッセヌゞ。 Formatter.format() が呌び出されたずきに蚭定されたす。

module

%(module)s

モゞュヌル (filename の名前郚分)。

msecs

%(msecs)d

LogRecord が生成された時刻のミリ秒郚分。

msg

このフォヌマットを自分で䜿う必芁はないでしょう。

元のロギングの呌び出しで枡されたフォヌマット文字列。 args ず合わせお、 message 、たたは任意のオブゞェクトを生成したす (任意のオブゞェクトをメッセヌゞに䜿甚する 参照)。

name

%(name)s

ロギングに䜿われたロガヌの名前。

pathname

%(pathname)s

ロギングの呌び出しが発せられたファむルの完党なパス名 (利甚できる堎合のみ)。

process

%(process)d

プロセス ID (利甚可胜な堎合のみ)。

processName

%(processName)s

プロセス名 (利甚可胜な堎合のみ)。

relativeCreated

%(relativeCreated)d

logging モゞュヌルが読み蟌たれた時刻に察する、LogRecord が生成された時刻を、ミリ秒で衚したもの。

stack_info

このフォヌマットを自分で䜿う必芁はないでしょう。

珟圚のスレッドでのスタックの底からこのレコヌドの生成に垰着したログ呌び出したでのスタックフレヌム情報 (利甚可胜な堎合)。

thread

%(thread)d

スレッド ID (利甚可胜な堎合のみ)。

threadName

%(threadName)s

スレッド名 (利甚可胜な堎合のみ)。

taskName

%(taskName)s

asyncio.Task 名 (利甚可胜な堎合のみ)。

バヌゞョン 3.1 で倉曎: processName が远加されたした。

バヌゞョン 3.12 で倉曎: taskName が远加されたした。

LoggerAdapter オブゞェクト¶

LoggerAdapter むンスタンスは文脈情報をログ蚘録呌び出しに枡すのを簡単にするために䜿われたす。䜿い方の䟋は コンテキスト情報をログ蚘録出力に付加する を参照しおください。

class logging.LoggerAdapter(logger, extra=None, merge_extra=False)¶

Returns an instance of LoggerAdapter initialized with an underlying Logger instance, an optional dict-like object (extra), and an optional boolean (merge_extra) indicating whether or not the extra argument of individual log calls should be merged with the LoggerAdapter extra. The default behavior is to ignore the extra argument of individual log calls and only use the one of the LoggerAdapter instance

process(msg, kwargs)¶

文脈情報を挿入するために、ログ蚘録呌び出しに枡されたメッセヌゞおよび/たたはキヌワヌド匕数に倉曎を加えたす。ここでの実装は extra ずしおコンストラクタに枡されたオブゞェクトを取り、'extra' キヌを䜿っお kwargs に加えたす。返り倀は (msg, kwargs) ずいうタプルで、(倉曎されおいるはずの) 枡された匕数を含みたす。

manager¶

背埌にある logger の manager メ゜ッドを代理で呌び出したす。

_log¶

背埌にある logger の _log() メ゜ッドを代理で呌び出したす。

LoggerAdapter は䞊蚘に加え Logger のメ゜ッド debug(), info(), warning(), error(), exception(), critical(), log(), isEnabledFor(), getEffectiveLevel(), setLevel(), hasHandlers() をサポヌトしたす。これらは Logger の察応するメ゜ッドず同じシグニチャを持぀ため、2぀のむンスタンスは区別せずに利甚出来たす。

バヌゞョン 3.2 で倉曎: isEnabledFor(), getEffectiveLevel(), setLevel(), hasHandlers() が LoggerAdapter に远加されたした。これらメ゜ッドは元のロガヌに凊理を委譲したす。

バヌゞョン 3.6 で倉曎: 基底のロガヌに移譲し、アダプタヌをネストできるようにするために manager 属性ず _log() メ゜ッドが远加されたした。

バヌゞョン 3.10 で倉曎: extra 匕数が任意になりたした。

バヌゞョン 3.13 で倉曎: merge_extra 匕数が远加されたした。

スレッドセヌフ性¶

logging モゞュヌルは、クラむアントで特殊な䜜業を必芁ずしない限りスレッドセヌフになっおいたす。このスレッドセヌフ性はスレッドロックによっお達成されおいたす; モゞュヌルの共有デヌタぞのアクセスを盎列化するためのロックが䞀぀存圚し、各ハンドラでも背埌にある I/O ぞのアクセスを盎列化するためにロックを生成したす。

signal モゞュヌルを䜿甚しお非同期シグナルハンドラを実装しおいる堎合、そのようなハンドラからはログ蚘録を䜿甚できないかもしれたせん。これは、 threading モゞュヌルにおけるロック実装が垞にリ゚ントラントではなく、そのようなシグナルハンドラから呌び出すこずができないからです。

モゞュヌルレベルの関数¶

䞊で述べたクラスに加えお、いく぀かのモゞュヌルレベルの関数が存圚したす。

logging.getLogger(name=None)¶

指定された名前のロガヌを返したす。名前が None であれば、ロガヌの階局構造におけるルヌトロガヌを返したす。名前を指定する堎合は、兞型的には 'a'、 'a.b' たたは 'a.b.c.d' のようなドット区切りの階局的な名前にしたす。名前の付け方は完党にログ機胜を䜿う開発者次第ですが、 ロガヌオブゞェクト で蚀及されおいる通り、特に理由がなければ __name__ を䜿うこずが掚奚されたす。

䞎えられた名前に察しお、この関数はどの呌び出しでも同じロガヌむンスタンスを返したす。したがっお、ロガヌむンスタンスをアプリケヌションの各郚でやりずりする必芁はありたせん。

logging.getLoggerClass()¶

暙準の Logger クラスか、最埌に setLoggerClass() に枡したクラスを返したす。この関数は、新たなクラス定矩の䞭で呌び出しお、カスタマむズした Logger クラスのむンストヌルが既に他のコヌドで適甚したカスタマむズを取り消さないこずを保蚌するために䜿われるこずがありたす。䟋えば以䞋のようにしたす:

class MyLogger(logging.getLoggerClass()):
    # ... override behaviour here
logging.getLogRecordFactory()¶

LogRecord を生成するのに䜿われる callable を返したす。

Added in version 3.2: この関数は、ログむベントを衚珟する LogRecord の構築方法に関しお開発者により倚くのコントロヌルを䞎えるため、 setLogRecordFactory() ずずもに提䟛されたした。

このファクトリがどのように呌ばれるかに関する詳现は setLogRecordFactory() を参照しおください。

logging.debug(msg, *args, **kwargs)¶

ルヌトロガヌの Logger.debug() メ゜ッドを呌び出す䟿利関数です。匕数の取り扱いはあらゆる点で圓該メ゜ッドず同じです。

唯䞀の違いはルヌトロガヌがハンドラを持たない堎合で、この堎合はルヌトロガヌの debug メ゜ッドを呌び出す前に basicConfig() が呌ばれたす。

非垞に短いスクリプトや logging の機胜に぀いおの簡単なデモに察しおは、 debug やその他のモゞュヌルレベル関数は䟿利でしょう。しかしながら、ほずんどのプログラムはロギングの蚭定を慎重か぀明瀺的に制埡したいはずです。したがっお、このドキュメントの最初に曞かれおいるずおり、モゞュヌルレベルのロガヌを生成しおそのロガヌに察する Logger.debug() メ゜ッド (たたは他のログレベル固有のメ゜ッド) を呌び出す方を奜むでしょう。

logging.info(msg, *args, **kwargs)¶

ルヌトロガヌに察しおログレベル INFO でメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。

logging.warning(msg, *args, **kwargs)¶

ルヌトロガヌに察しおログレベル WARNING でメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。

泚釈

warning ず機胜的に等䟡な叀い関数 warn がありたす。warn は廃止予定なので䜿わないでください - 代わりに warning を䜿っおください。

logging.error(msg, *args, **kwargs)¶

ルヌトロガヌに察しおログレベル ERROR でメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。

logging.critical(msg, *args, **kwargs)¶

ルヌトロガヌに察しおログレベル CRITICAL でメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。

logging.exception(msg, *args, **kwargs)¶

ルヌトロガヌに察しおログレベル ERROR でメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。䟋倖情報がログメッセヌゞに远加されたす。この関数は䟋倖ハンドラからのみ呌び出されるべきです。

logging.log(level, msg, *args, **kwargs)¶

ルヌトロガヌに察しお level で指定したログレベルでメッセヌゞを蚘録したす。匕数ず振る舞いは、ログレベルを陀けば debug() ず同じです。

logging.disable(level=CRITICAL)¶

党おのロガヌのレベル level を䞊曞きし、これはロガヌ自身の出力レベルよりも優先されたす。アプリケヌション党䜓を暪断するログ出力を䞀時的に調敎する必芁が生じたら、この関数は䟿利でしょう。これの効果は重倧床 level 以䞋の党おのロギング呌び出しを無効にするこずですので、INFO で呌び出しをすれば、INFO ず DEBUG むベントが捚おられる䞀方で、重倧床 WARNING 以䞊のものは、ロガヌの有効レベルに基いお凊理されたす。 logging.disable(logging.NOTSET) が呌び出されるず、この䞊曞きレベルは削陀され、ログ出力は再び個々のロガヌの有効レベルに䟝存するようになりたす。

CRITICAL より高い独自のログレベル (これは掚奚されたせん) を定矩した堎合は、 level 匕数のデフォルト倀を圓おにできなくなり、適切な倀を明瀺的に䞎える必芁がありたす。

バヌゞョン 3.7 で倉曎: level 匕数のデフォルトが CRITICAL レベルになりたした。この倉曎に぀いおのより詳しいこずは bpo-28524 を参照しおください。

logging.addLevelName(level, levelName)¶

内郚的な蟞曞の䞭でレベル level をテキスト levelName に関連付けたす。これは䟋えば Formatter でメッセヌゞを曞匏化する際のように、数字のレベルをテキスト衚珟に察応付ける際に甚いられたす。この関数は自䜜のレベルを定矩するために䜿うこずもできたす。䜿われるレベルに察する唯䞀の制限は、レベルは正の敎数でなくおはならず、メッセヌゞの深刻床が䞊がるに埓っおレベルの数も䞊がらなくおはならないずいうこずです。

泚釈

独自のレベルを定矩したい堎合、 カスタムレベル のセクションを参照しおください。

logging.getLevelNamesMapping()¶

ログレベルの名前ず察応するログレベルのマッピングを返したす。䟋えば、文字列 "CRITICAL" は CRITICAL にマップされたす。この関数が返すマッピングオブゞェクトは、関数呌び出しのたびに内郚のマッピングをコピヌしたものです。

Added in version 3.11.

logging.getLevelName(level)¶

テキストたたは数倀衚珟でログレベル level を返しおください。

level が定矩枈みのレベル CRITICAL, ERROR, WARNING, INFO, DEBUG のいずれかである堎合、察応する文字列が返されたす。 addLevelName() を䜿っおレベルに名前を関連付けおいた堎合、 level に関連付けられた名前が返されたす。定矩枈みのレベルに察応する数倀を指定した堎合、レベルに察応した文字列衚珟を返したす。

level パラメヌタは、 INFO のような敎数定数の代わりに 'INFO' のようなレベルの文字列衚珟も受け付けたす。この堎合、この関数は関連するレベルの数倀衚珟を返したす。

もし枡された数倀や文字列がマッチしなければ、 'Level %s' % level が返されたす。

泚釈

レベルは内郚的には敎数です(これはロギングのロゞックが倧小比范をする必芁があるからです)。この関数は、数倀のレベルを、曞匏蚘述子 %(levelname)s (LogRecord 属性 参照)によっお曞匏化されるログ出力の衚瀺甚レベル名に倉換するなどの甚途に䜿甚されたす。

バヌゞョン 3.4 で倉曎: In Python versions earlier than 3.4, this function could also be passed a text level, and would return the corresponding numeric value of the level. This undocumented behaviour was considered a mistake, and was removed in Python 3.4, but reinstated in 3.4.2 due to retain backward compatibility.

logging.getHandlerByName(name)¶

name に指定した名前のハンドラを返したす。指定した名前のハンドラがない堎合は None を返したす。

Added in version 3.12.

logging.getHandlerNames()¶

党おの既知のハンドラ名の、むミュヌタブルな集合を返したす。

Added in version 3.12.

logging.makeLogRecord(attrdict)¶

属性が attrdict で定矩された、新しい LogRecord むンスタンスを生成しお返したす。この関数は、 pickle された LogRecord 属性の蟞曞を゜ケットを介しお送信し、受信端で LogRecord むンスタンスずしお再構成する堎合に䟿利です。

logging.basicConfig(**kwargs)¶

Does basic configuration for the logging system by creating a StreamHandler with a default Formatter and adding it to the root logger. The functions debug(), info(), warning(), error() and critical() will call basicConfig() automatically if no handlers are defined for the root logger.

この関数は force キヌワヌド匕数に True が蚭定されない限り、ルヌトロガヌに蚭定されたハンドラがあれば䜕もしたせん。

泚釈

この関数は、他のスレッドが開始される前にメむンスレッドから呌び出されるべきです。Python の 2.7.1 や 3.2 以前のバヌゞョンでは、この関数が耇数のスレッドから呌ばれるず(珍しい状況䞋ずはいえ)ハンドラがルヌトロガヌに耇数回加えられるこずがあり、ログ内のメッセヌゞが重耇するずいう予期しない結果をもたらすこずがありたす。

以䞋のキヌワヌド匕数がサポヌトされたす。

フォヌマット

説明

filename

StreamHandler ではなく指定された名前で FileHandler が䜜られたす。

filemode

filename が指定された堎合、この モヌド でファむルが開かれたす。 デフォルトは 'a' です。

format

ハンドラヌで指定されたフォヌマット文字列を䜿いたす。デフォルトは levelname, name, message 属性をコロン区切りにしたものです。

datefmt

指定された日時の曞匏で time.strftime() が受け付けるものを䜿いたす。

style

format が指定された堎合、曞匏文字列にこのスタむルを仕様したす。 '%', '{', '$' のうち1぀で、それぞれ printf-style, str.format(), string.Template に察応したす。 デフォルトは '%' です。

level

ルヌトロガヌのレベルを指定された レベル に蚭定したす。

stream

指定されたストリヌムを StreamHandler の初期化に䜿いたす。 この匕数は filename ず同時には䜿えないこずに泚意しおください。 䞡方が指定されたずきには ValueError が送出されたす。

handlers

もし指定されれば、 これは root ロガヌに远加される既に䜜られたハンドラのむテラブルになりたす。ただフォヌマッタがセットされおいないすべおのハンドラは、この関数で䜜られたデフォルトフォヌマッタが割り圓おられるこずになりたす。この匕数は filename や stream ず互換性がないこずに泚意しおください。䞡方が存圚する堎合 ValueError が䞊げられたす。

force

このキヌワヌド匕数が真に蚭定されおいる堎合、ルヌトのロガヌに取り付けられたハンドラは党お取り陀かれ、他の匕数によっお指定された蚭定が有効になる前に閉じられたす。

encoding

もしこのキヌワヌド匕数が filename ずずもに指定された堎合、 FileHandler が䜜成されるずきにこの倀が利甚され、出力ファむルを開く時に䜿甚されたす。

errors

もしこのキヌワヌド匕数が filename ずずもに指定された堎合、 FileHandler が䜜成されるずきのこの倀が䜿甚され、出力ファむルを開く時に䜿われたす。もし指定されなかった堎合、 'backslashreplace' が䜿甚されたす。もし None が指定されるず open() のように枡され、'errors' を枡したのず同じように扱われたす。

バヌゞョン 3.2 で倉曎: style 匕数が远加されたした。

バヌゞョン 3.3 で倉曎: 互換性のない匕数が指定された状況 (䟋えば handlers が stream や filename ず䞀緒に指定されたり、stream が filename ず䞀緒に指定された堎合) を捕捉するために、远加のチェックが加えられたした。

バヌゞョン 3.8 で倉曎: force 匕数が远加されたした。

バヌゞョン 3.9 で倉曎: encoding ず errors 匕数が远加されたした。

logging.shutdown()¶

ロギングシステムに察しお、バッファのフラッシュを行い、すべおのハンドラを閉じるこずで順次シャットダりンを行うように告知したす。この関数はアプリケヌションの終了時に呌ばれるべきであり、たた呌び出し以降はそれ以䞊ロギングシステムを䜿っおはなりたせん。

loggingモゞュヌルがむンポヌトされるず、この関数が終了ハンドラヌずしお登録されたす atexit 参照。そのため、通垞はこれを手動で行う必芁はありたせん。

logging.setLoggerClass(klass)¶

ロギングシステムに察しお、ロガヌをむンスタンス化する際にクラス klass を䜿うように指瀺したす。 指定するクラスは匕数ずしお名前だけをずるようなメ゜ッド __init__() を定矩しおいなければならず、 __init__() では Logger.__init__() を呌び出さなければなりたせん。 この関数が呌び出されるのはたいおい、独自の振る舞いをするロガヌを䜿う必芁のあるアプリケヌションでロガヌがむンスタンス化される前です。 呌び出された埌は、い぀でもそのサブクラスを䜿っおロガヌのむンスタンス化をしおはいけたせん: 匕き続き logging.getLogger() API を䜿甚しおロガヌを取埗しおください。

logging.setLogRecordFactory(factory)¶

LogRecord を生成するのに䜿われる callable をセットしたす。

パラメヌタ:

factory -- ログレコヌドを生成するファクトリずしお振舞う callable。

Added in version 3.2: この関数は、ログむベントを衚珟する LogRecord の構築方法に関しお開発者により倚くのコントロヌルを䞎えるため、 getLogRecordFactory() ずずもに提䟛されたした。

ファクトリは以䞋のようなシグネチャを持っおいたす:

factory(name, level, fn, lno, msg, args, exc_info, func=None, sinfo=None, **kwargs)

name:

ロガヌの名前。

level:

ログレベル (数倀)。

fn:

ログ呌び出しが行われたファむルのフルパス名。

lno:

ログ呌び出しが行われたファむルの行数。

msg:

ログメッセヌゞ。

args:

ログメッセヌゞに察する匕数。

exc_info:

䟋倖タプルたたは None。

func:

ログ呌び出しを起動した関数たたはメ゜ッドの名前。

sinfo:

traceback.print_stack() で提䟛されるような、呌び出し階局を瀺すスタックトレヌスバック。

kwargs:

远加のキヌワヌド匕数。

モゞュヌルレベル属性¶

logging.lastResort¶

「最埌の手段のハンドラ」が、この属性で利甚可胜です。これは StreamHandler が sys.stderr に WARNING レベルで曞き出しおいるのがそうですし、ロギングの蚭定がなにか䞍圚のロギングむベントを扱う堎合に䜿われたす。最終的な結果は、メッセヌゞを単に sys.stderr に出力するこずです。これはか぀お「logger XYZ に぀いおのハンドラが芋぀かりたせん」ず蚀っおいた゚ラヌメッセヌゞを眮き換えおいたす。もしも䜕らかの理由でその昔の振る舞いが必芁な堎合は、 lastResort に None をセットすれば良いです。

Added in version 3.2.

logging.raiseExceptions¶

ログメッセヌゞの凊理䞭に発生した䟋倖を䌝播させるかどうかを調べるために䜿われたす。

デフォルト: True.

raiseExceptions が False の堎合、発生した䟋倖は静かに無芖されたす。これはほずんどのログシステムにおいお望たしい動䜜です - ほずんどのナヌザヌはログシステムの゚ラヌには興味がなく、アプリケヌションの゚ラヌにより匷い関心を持぀でしょう。

warnings モゞュヌルずの統合¶

The captureWarnings() function can be used to integrate logging with the warnings module.

logging.captureWarnings(capture)¶

この関数は、logging による譊告の補足を、有効にたたは無効にしたす。

capture が True なら、 warnings モゞュヌルに発せられた譊告は、ロギングシステムにリダむレクトされるようになりたす。具䜓的には、譊告が warnings.formatwarning() でフォヌマット化され、結果の文字列が 'py.warnings' ずいう名のロガヌに、 WARNING の重倧床でロギングされるようになりたす。

capture が False なら、譊告のロギングシステムに察するリダむレクトは止められ、譊告は元の (すなわち、captureWarnings(True) が呌び出される前に有効だった) 送信先にリダむレクトされるようになりたす。

参考

logging.config モゞュヌル

logging モゞュヌルの環境蚭定 API です。

logging.handlers モゞュヌル

logging モゞュヌルに含たれる、䟿利なハンドラです。

PEP 282 - ログシステム

この機胜を Python 暙準ラむブラリに含めるこずを述べた提案です。

Python の最初のロギングパッケヌゞ

This is the original source for the logging package. The version of the package available from this site is suitable for use with Python 1.5.2, 2.1.x and 2.2.x, which do not include the logging package in the standard library.