Python-logging模块

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用户输出的消息
format参数

二.将日志写入文件

设置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")