Python基础语法 - logging
描述:
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志。
logging的日志可以分为5个级别:
- debug()
- info()
- warning()
- error()
- critical()
简单用法:
logging.debug('degbug message') logging.info('info message') logging.warning('hello') logging.error('error message') logging.critical('critical message') >>>输出: WARNING:root:hello ERROR:root:error message CRITICAL:root:critical message
level = warning
将日志写入文件:
import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s %(filename)s - %(levelname)s - %(message)s', datefmt= '%a,%d %b %Y %H:%M:%S', filename = 'test.log', filemode = 'a') logging.debug('degbug message') logging.info('info message') logging.warning('hello') logging.error('error message') logging.critical('critical message') >>>输出: test.log Wed,21 Mar 2018 22:58:03 logging_module.py - DEBUG - degbug message Wed,21 Mar 2018 22:58:03 logging_module.py - INFO - info message Wed,21 Mar 2018 22:58:03 logging_module.py - WARNING - hello Wed,21 Mar 2018 22:58:03 logging_module.py - ERROR - error message Wed,21 Mar 2018 22:58:03 logging_module.py - CRITICAL - critical message
- level = logging.DEBUG 设置日志级别
logging.basicConfig函数各参数:
filename:指定日志文件名;
filemode:指定日志文件的打开模式,'w'或者'a';
format:指定输出的格式和内容;
datefmt:指定日期时间格式;
level:设置日志级别,默认为logging.WARNNING;
stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;
format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s:数字形式的日志级别
%(levelname)s:文本形式的日志级别
%(pathname)s:调用日志输出函数的模块的完整路径名,可能没有
%(filename)s:调用日志输出函数的模块的文件名
%(module)s:调用日志输出函数的模块名
%(funcName)s:调用日志输出函数的函数名
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:用户输出的消息
logger
还有一个模块级别的函数是logging.getLogger([name])(返回一个logger对象,如果没有指定名字将返回root logger)
Logger.setLevel(logging.DEBUG)指定最低的日志级别,低于lel的级别将被忽略。
简单的过程:
logger = logging.getLogger() fh = logging.FileHandler('test.log') # 创建一个handler,用于写入日志文件 ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) logger.addHandler(fh) logger.addHandler(ch) logger.debug('logger debug message') logging.info('logger info message') logging.warning('logger warning message') logging.error('logger error message') logging.critical('logger critical message') >>>屏幕文件同时输出: 2018-03-22 00:02:00,476 - root - WARNING - logger warning message 2018-03-22 00:02:00,476 - root - ERROR - logger error message 2018-03-22 00:02:00,476 - root - CRITICAL - logger critical message