logging模块的学习记录

字数 598阅读 20

参考官方文档

日志级别等级

  • 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