この記事の内容はPythonのロギングモジュールの解析(コード例)ですので、ある程度参考になる内容ですので、困っている方は参考にしていただければ幸いです。
#1. ログ レベル
設定されていない場合、デフォルトは iwarning
#2. ロギング モジュールの主な構造Loggers: 関連する構成設定など、プログラムで直接使用するためのインターフェイスを提供します。
Formatters
#パラメータ意味
##%(name)s | ロガーの名前 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
数値形式のログ レベル | ||||||||||||||||||||||||||||||
テキスト形式のログ レベル | ||||||||||||||||||||||||||||||
ログ出力関数を呼び出すモジュールのフル パス名には、## が含まれていない場合があります。 | ||||||||||||||||||||||||||||||
ログ出力関数を呼び出すモジュールのファイル名 | ||||||||||||||||||||||||||||||
ログ出力関数を呼び出すモジュール名 | ##%(funcName)s | |||||||||||||||||||||||||||||
%(lineno)d | ||||||||||||||||||||||||||||||
%(created)f | ||||||||||||||||||||||||||||||
##%(relativeCreated)d | ||||||||||||||||||||||||||||||
%(asctime)s | ||||||||||||||||||||||||||||||
%(thread)d | ||||||||||||||||||||||||||||||
%( threadName)s | ||||||||||||||||||||||||||||||
%(process)d | ||||||||||||||||||||||||||||||
#%(メッセージ)s | ||||||||||||||||||||||||||||||
詳細な場所 | 説明 | |
---|---|---|
logging.handlers.RotatingHandler | ログのロールバック メソッド、ログ ファイルの最大数とログ ファイルのロールバックをサポートします | |
logging.handlers.TimeRotatingHandler | ログ ロールバック メソッド、次の範囲内でログ ファイルをロールバックします特定の時間範囲 | |
logging.handlers.SocketHandler | TCP/IPソケットにログをリモート出力 | |
logging.handlers.DatagramHandler | UDP ソケットへのリモート出力ログ | |
logging.handlers .SMTPHandler | 電子メール アドレスにログをリモート出力 | |
logging.handlers.SysLogHandler | syslog にログ出力 | |
logging.handlers.NTEventLogHandler | Windows NT/2000/xp のイベント ログへのリモート出力 | |
logging.handlers.MemoryHandler | ログはメモリ内の指定されたバッファに出力されます | |
logging.handlers.HTTPHandler | 「GET」または「POST」による HTTP サーバーへのリモート出力 | ## |
Logger はすべてのロギング方法を管理します。
from logging import error, debug, warning, info, fatal, critical, getLogger #返回一个Logger实例 #以'root'为名字的日志对象在Logger对象中只有一个实例 logger=getLogger('root') print('获取根日志对象',logger.root) print('获取manager',logger.manager) print('获取根日志对象的名字',logger.name) print('获取根日志对象记录水平',logger.level) print('获取根日志对象过滤器列表',logger.filters) print('获取根日志对象处理器列表',logger.handlers) print('获取根日志对象',logger.disabled) #设置日志记录水平 logger.setLevel('info') #输出日志信息,格式化输出 logger.info('this is %s','info',exc_info=1) #记录warning信息 logger.warning('') #记录error信息 logger.error('') #等价于logger.error('',exc_info=1) logger.exception('') #记录debug信息 logger.debug('') #记录critical信息 logger.critical('') #直接指定级别 logger.log('info','') #添加处理器 logger.addHandler() #移除处理器 logger.removeHandler() #判是否有处理器 logger.hasHandlers()
3. ロガーの基本的な使用法
例:
import logging import sys def my_get_logger(appname): #获取logger实例,如果参数为空则返回root logger logger=logging.getLogger(appname) #创建日志输出格式 formatter=logging.Formatter('%(asctime)s %(levelname)s: %(message)s') #指定输出的文件路径 file_handler=logging.FileHandler('test.log') # 设置文件处理器,加载处理器格式 file_handler.setFormatter(formatter) #控制台日志 console_handler=logging.StreamHandler(sys.stdout) console_handler.formatter=formatter #为logger添加的日志处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) #指定日志的最低输出级别,默认为warn级别 logger.setLevel(logging.INFO) return logger if __name__ == '__main__': logger=my_get_logger('test') logger.debug('this is debug info') logger.info('this is information') logger.warning('this is warning message') logger.error('this is error message') logger.fatal('this is fatal message,it is same ad logger.critical') logger.critical('this is critical message')結果:
2018-11-22 16:31:34,023 INFO: this is information 2018-11-22 16:31:34,023 WARNING: this is warning message 2018-11-22 16:31:34,023 ERROR: this is error message 2018-11-22 16:31:34,024 CRITICAL: this is fatal message,it is same ad logger.critical 2018-11-22 16:31:34,024 CRITICAL: this is critical message
4. ロガーのログ記録の論理呼び出しプロセス
logger.debug およびその他のメソッドを呼び出してログを記録します。
コードによる設定の完了主に getLogger メソッドを使用しますが、変更は簡単ではありません
#logging.cong [loggers] #定义日志的对象名称是什么,注意必须定义root,否则报错 keys=root,main [handlers] #定义处理器的名字是什么,可以有多个,用逗号隔开 keys=consoleHandler [formatters] #定义输出格式对象的名字,可以有多个,用逗号隔开 keys=simpleFormatter [logger_root] #配置root对象的日志记录级别和使用的处理器 level=INFO handlers=consoleHandler [logger_main] #配置main对象的日志记录级别和使用的处理器,qualname值得就是日志对象的名字 level=INFO handlers=consoleHandler qualname=main #logger对象把日志传递给所有相关的handler的时候,会逐级向上寻找这个logger和它所有的父logger的全部handler, #propagate=1表示会继续向上搜寻; #propagate=0表示停止搜寻,这个参数涉及重复打印的坑。 propagate=0 [handler_consoleHandler] #配置处理器consoleHandler class=StreamHandler level=WARNING formatter=simpleFormatter args=(sys,) [formatter_simpleFormatter] #配置输出格式过滤器simpleFormatter format=%(asctime)-%(name)s-%(levelname)s-%(message)s注: ロガーとハンドラーの両方でログ レベルを設定でき、ログ出力が最高レベルになることがわかります。 辞書フォーム構成を使用する
辞書フォーム構成は、より強力かつ柔軟です。 dictConfig 関数を使用すると、他の形式の構成ファイルを json、YAML などの辞書に変換できます。
例:import yaml from logging.config import dictConfig import os filename=os.path.dirname(os.path.abspath(__file__)) with open(filename+'/logging.yaml','r') as f: log=yaml.load(f.read()) dictConfig(log)
#logging.yaml #注意:yaml格式严格,:后面一定要带空格 version: 1 formatters: simple: format: '%(asctime)s-%(name)s-%(levelname)s-%(message)s' handlers: console: class: logging.StreamHandler level: DEBUG formatter: simple stream: ext://sys.stdout console_err: class: logging.StreamHandler level: DEBUG formatter: simple stream: ext://sys.stderr loggers: simpleExample: level: DEBUG handlers: [console] propagate: no root: level: DEBUG handlers: [console_err]]
6. ロガー設定の変更をリッスンする
logging.config.listen(port) 関数を使用すると、英語のプログラムが新しいロガーをリッスンできるようになります。ソケット アプリケーションを再起動せずに実行時に構成を変更するという目的を達成するための構成情報。ああ、
以上がPython でのロギングモジュールの分析 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。