Bug是所有程序员的亲密伙伴,而Debug的最好方式莫过于在程序运行过程中保存明晰的日志。logging
模块为Python程序员提供了书写代码运行日志的利器。
事件的级别
logging
模块记录的日志信息包括以下级别
默认情形下,
logging
模块只打印warning
级别和以上级别的日志信息。
日志基本配置
logging
模块的基本设置使用basicConfig
import logging
logging.basicConfig(filename='example.log', level=logging.DEBUG) # 日志配置应该放在所有日志行为的首位
# logging.basicConfig(level=getattr(logging, 'DEBUG')) # 也可以直接使用字符串来指定日志级别
# logging.basicConfig(filemode='w') #默认情形下日志文件会在原文件基础上续写,指定文件打开模式为‘w'则刷新文件
# logging.basicConfig(format='%(levelname)s:%(message)s') # 指定日志信息的格式
# logging.basicConfig(format='%(asctime)s:%(message)s') # 加入时间信息
# logging.basicConfig(format='%(asctime)s:%(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') # 指定时间信息格式
logging.warning('is when this event was logged.')
logging.debug('Debugging !')
logging.info('Info !')
logging.warining('Warn !')
LogRecord
logging
模块中的成员包含:loggers
,handlers
,filters
,formatters
日志信息以LogRecord
的形式在成员之间传递
Logger
每个Logger
实例都有名字,名字自取可表示日志信息出处,用.
组织成命名空间,通常可以使用模块名称作为Logger
实例的名字
logger = logging.getLogger(__name__)
# logger的配置
logger.setLevel() # 设置日志级别
logger.addHandler() # 当前logger添加、删除Handler
logger.removeHandler()
logger.addFilter() # 当前logger添加、删除Filter
# logger记录日志
logger.debug()
logger.info()
logger.warning()
logger.error()
示例
import logging
# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')