Python loggingモジュールhandersの使い方について詳しく説明します。


一、ハンドルとは何ですか?
logingモジュールに含まれるクラス
ログオブジェクトをカスタマイズするためのルール(例えば、ログ出力フォーマット、等級などを設定する)
常用する3つのサブクラス:StreamHandler、FileHandler、TimedRotating FileHandler
二、handers基礎応用
2.1 StreamHandlerコンソール出力ログ

import logging

#    logger    
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #         

#        
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#  StreamHandler  
sh = logging.StreamHandler()
#StreamHandler         
sh.setLevel(logging.DEBUG)
#StreamHandler         
sh.setFormatter(formatter)

logger.addHandler(sh)  #logger      StreamHandler  
#    
logger.info('newdream')
上のコードを実行すると、コンソールでログ情報を出力します。
2.2 FileHandlerログをファイルに出力する

import logging

#    logger    
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #         

#        
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#  FileHandler  
fh = logging.FileHandler('test.log')
#FileHandler         
fh.setLevel(logging.DEBUG)
#FileHandler         
fh.setFormatter(formatter)

logger.addHandler(fh)  #logger      FileHandler  
#    
logger.info('newdream')
上のコードが実行されると、コンソールはログ情報を出力せず、現在のフォルダにtest.logログファイルを作成してログを記録します。
2.3 TimedRotating FileHandlerログ分割

import logging
from logging import handlers

#    logger    
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)  #         

#        
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

#  TimedRotatingFileHandler  
rh = handlers.TimedRotatingFileHandler("test.log", when='S', interval=1, backupCount=5)
#TimedRotatingFileHandler         
rh.setLevel(logging.DEBUG)
#TimedRotatingFileHandler         
rh.suffix = "%Y_%m_%d_%H_%M_%S.log"
#TimedRotatingFileHandler         
rh.setFormatter(formatter)

logger.addHandler(rh)  #logger      TimedRotatingFileHandler  
#    
logger.info('newdream')
上のコードを実行すると、コンソールはログ情報を出力せず、現在のフォルダにtest_を新規作成します。年月太陽時節あぜを分ける秒.ログログファイルをログに記録します。
TimedRotatingFileHandlerを使用してオブジェクトを作成する場合、その構造関数は以下のように定義されます。
  • TimedRotating FileHandler(filename[,interval]]
  • filename:ログファイル名を出力するプレフィックスです。例えば、log/myap.log
  • when:日付フォーマットによって分割され、指定された文字列パラメータを受信した場合、受信した値は以下の通りです。
  • 「S」:Seconds
    「M」:Minutes
    「H」:Hours
    「D」:Days
    「W」:Week day(0=Mondy)
    「midnight」:Roll over at midnight
    intervalとは、どれぐらいの単位whenを待っていれば、ロギングが自動的にファイルを再構築しますか?このファイルの作成はfilename+suffixによって決まります。このファイルは前のファイルと重名があれば、自動的に前のファイルを上書きします。
    backup Countはログを保持する個数です。デフォルトの0は自動的にログを削除しません。5に設定すると、ファイルの作成中にライブラリがこれを上回るかどうかを判断し、超えたら最初に作成したものから削除します。
    三、結び
    以上のログの実例は、読者により明確な操作と理解を与えるために、コードを分けて単独で実現されます。
    2.3で5つのログを達成したいなら削除する効果があります。ログをループで出力してもいいです。以下の通りです。
    while True:
    logger.info('newdream')
    3つのハンダーズのログは共同で使用できます。すべて独立したハンダーオブジェクトですが、一般的にはFileHandlerとTimedRotatingFileHandlerは同時に使用されません。
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。