logging模块的几个级别,默认情况下Logging模块有6个级别,代码如下
#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'
import logging
print(logging.NOTSET)
print(logging.DEBUG)
print(logging.INFO)
print(logging.WARNING)
print(logging.ERROR)
print(logging.CRITICAL)
结果为下
它们的值为0-50(也可以自定义级别),这些级别的用处是,先将自己的日志定一个级别,logging模块发出的信息级别高于定义的级别,将在标准输出(屏幕)显示出来,发出的信息级别低于定义的级别则忽略,如果未定义级别,默认定义的级别是WARNING
使用logging最简单的方法就是logging.basicConfig([**kwargs])
这个函数可用的参数有
filename 用指定的文件名创建FiledHandler(后面会具体讲解handler的概念),这样日志会被存储在指定的文件中
filemode 文件打开方式,在指定了filename时使用这个参数,默认值为'a'还可以指定为'w'
datefmt 指定日期时间格式
level 设置rootlogger(后面会具体讲到)的日志级别
stream 用指定的stream创建streamhandler,可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr,若同时列出了filename和stream两个参数,则stream参数会被忽略
参数中的format参数可能用到的格式化串
%(name)s: Logger的名字
%(levelno)s: 数字形式的日志级别
%(levelname)s: 文本形式的日志级别
%(pathname)s: 调用日志输出函数的模块的完整路径名
%(filename)s: 调用日志输出函数的模块的文件名
%(module)s: 调用日志输出函数的模块名
%(funcname)s: 调用日志输出函数的函数名
%(lineno)d: 调用日志输出函数的语句所在的代码行
%(created)f: 当前时间,用unix标准的表示时间的浮点数表示
%(asctime)s: 字符串形式的当前时间,默认格式是'20017-07-08 16:49:45,896' 逗号后面的是毫秒
%(message)s: 用户输出的消息
参数中的datefmt是日期的格式化,最常用的几个格式化是:
%Y: 年份的长格式,如2017
%y: 年份的短格式,如 17
%m: 月份,01~12
%d: 日期,01~31
%H: 小时,0~23
%w: 星期,0~6,星期天是0
%M: 分钟,00~59
%S: 秒,00~59
下面利用logging.basicConfig写个最基本的日志模块应用程序中,编写testLogging.py代码如下
#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'
import logging
class TestLogging(object):
def __init__(self):
logFormat = '%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s'
logFilename = 'testlog.txt'
logging.basicConfig(level=logging.INFO, format=logFormat, filename=logFilename, filemode='w')
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
if __name__ == '__main__':
tl = TestLogging()
运行程序,会在当前目录下生成一个testlog.txt文件,内容如下
默认的logging级别是logging.INFO,而logging.debug的级别低于logging.INFO,所有没有显示logging.debug的内容
在程序中关键位置插入log信息,执行python程序时出现什么问题。可以直接查找日志文件,无须再一步步地debug试调