logging(日志模块)
python中logging模块是来记录我们程序运行的各种状态('很强大')
一.日志级别
import logging logging.debug('debug 仓井空') logging.info('info 泷泽萝拉') logging.warning('warning 小泽玛利亚') logging.error('error 武藤兰') logging.critical('critical 吉泽明步 ') # 结果: # WARNING:root:warning 小泽玛利亚 # ERROR:root:error 武藤兰 # CRITICAL:root:critical 吉泽明步
上面的显示结果低于WARNING级别的就不显示了
日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG
python中的logging模块默认只显示大于等于WARNING级别的,默认将日志打印到标准输出台
1 FATAL:致命错误 2 CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用 3 ERROR:发生错误时,如IO操作失败或者连接问题 4 WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误 5 INFO:处理请求或者状态变化等日常事务 6 DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
logging基本配置在控制台输出
import logging logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(lineno)d %(message)s') logger = logging.getLogger(__name__) logger.debug('debug 仓井空') logger.info('info 泷泽萝拉') logger.warning('warning 小泽玛利亚') logger.error('error 武藤兰') logger.critical('critical 吉泽明步 ') #结果: ''' 2019-01-16 16:40:34,044 - __main__ - 110 info 泷泽萝拉 2019-01-16 16:40:34,044 - __main__ - 111 warning 小泽玛利亚 2019-01-16 16:40:34,044 - __main__ - 112 error 武藤兰 2019-01-16 16:40:34,044 - __main__ - 113 critical 吉泽明步 '''
logging中可以选择很多消息级别,如debug、info、warning、error以及critical。
通过赋予logger或者handler不同的级别,开发者就可以只输出错误信息到特定的记录文件,
或者在调试时只记录调试信息。
例如,我们将logger的级别改为DEBUG,再观察一下输出结果
logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s - %(lineno)d %(message)s')
logging.basicConfig函数各参数:
filename:指定日志文件名;
filemode:和file函数意义相同,指定日志文件的打开模式,'w'或者'a';
datefmt:指定日期时间格式。level:设置rootlogger
level:设置日志级别,默认为logging.WARNNING;
stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;
format:指定输出的格式和内容,format可以输出很多有用的信息,
1 format参数中可能用到的格式化串: 2 %(name)s Logger的名字 3 %(levelno)s 数字形式的日志级别 4 %(levelname)s 文本形式的日志级别 5 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 6 %(filename)s 调用日志输出函数的模块的文件名 7 %(module)s 调用日志输出函数的模块名 8 %(funcName)s 调用日志输出函数的函数名 9 %(lineno)d 调用日志输出函数的语句所在的代码行 10 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 11 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 12 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 13 %(thread)d 线程ID。可能没有 14 %(threadName)s 线程名。可能没有 15 %(process)d 进程ID。可能没有 16 %(message)s用户输出的消息
二.将日志写入文件
设置logging,创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件中,
import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) handler = logging.FileHandler("log.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")