日志级别等级
- critical > error > warning > info > debug > notset
Level | Numeric value |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
- 默认日志级别,为warning级别,也就是说warning级别以上的才会打印输出,而info级别在默认情况下是不会输出的。
- logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。
两种方法生成日志文件:
1. 使用logging.basicConfig( )接口
通过设置filename等参数,可以将生成的日志,保存在filename指定的文件中,如果不指定filename参数,则会根据日志输出级别,将日志信息通过控制台打印出来。
# 文件名保存为 ‘‘ log.py ’’
import logging
LOGGER_LEVEL = logging.INFO #设置用户信息级别打印输出
logging.basicConfig(
level=LOGGER_LEVEL,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='test.log',
filemode='a'
)
logger = logging.getLogger(__file__)
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
运行结果:
INFO:root:info message
WARNING:root:warning message
ERROR:root:error message
CRITICAL:root:critical message
logging.basicConfig()接口参数说明
level=LOGGER_LEVEL, # 定义打印输出级别
- level : 指定打印输出级别,有以下几个级别:
- logging.CRITICAL,致命的
- logging.ERROR, 错误
- logging.WARNING,警告
- logging.INFO, 用户信息
- logging.DEBUG, 调试
- logging.NOSET 不设置
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', #设置打印输出格式 format可以输出很多有用信息,如上例所示: |%(...)s 输出为字符串 | %(...)d 输出为整数
- %(levelno)s: 打印日志级别的数值
- %(levelname)s: 打印日志级别名称
- %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
- %(filename)s: 打印当前执行程序名
- %(funcName)s: 打印日志的当前函数
- %(lineno)d: 打印日志的当前行号
- %(asctime)s: 打印日志的时间
- %(thread)d: 打印线程ID
- %(threadName)s: 打印线程名称
- %(process)d: 打印进程ID
- %(message)s: 打印日志信息
datefmt='%a, %d %b %Y %H:%M:%S', # 设置asctime,也就是日期时间的打印格式
filename='test.log', # log保存的文件名称为 test.log
filemode='a' # 文件打开模式,‘a’就是追加,是默认参数,跟文件操作一样
2. 通过创建logger实例,实现文件保存日志和控制台打印输出日志
logger = logging.getLogger("name") #创建一个logger实例
# 文件名保存为 ‘‘ log1.py ’’
import logging
import sys
# 获取logger实例,如果参数为空则返回root logger
logger = logging.getLogger("name")
# 给实例指定日志的最低输出级别,默认为WARNING级别
logger.setLevel(logging.INFO)
# 指定logger输出格式,可以同时作用于文件日志和控制台日志的输出格式
formatter = logging.Formatter('%(asctime)s %(filename)s %(levelname)-8s: %(message)s')
# 文件日志,指定文件名称和保存日志的格式
file_handler = logging.FileHandler("test1.log")
file_handler.setFormatter(formatter) # 可以通过setFormatter指定输出格式
# file_handler.formatter = formatter # 也可以直接给formatter赋值
# 控制台日志,指定控制台输出格式
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)
# console_handler.formatter = formatter # 也可以直接给formatter赋值
# 为logger实例添加的日志处理器,文件处理器和控制台处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 输出不同级别的log
logger.debug('this is debug info')
logger.info('this is information')
logger.warn('this is warning message')
logger.error('this is error message')
logger.critical('this is critical message')
输出结果如下:
2018-05-04 10:34:10,194 log1.py INFO : this is information
2018-05-04 10:34:10,195 log1.py WARNING : this is warning message
2018-05-04 10:34:10,195 log1.py ERROR : this is error message
2018-05-04 10:34:10,195 log1.py CRITICAL: this is critical message
网友评论