Python--logging日志
日志等级:
由高到底:critical、error、warning、info、debug、notset
默认情况下,日志级别在WARNING及以上的日志输出到标准输出。
-----------------------------------------------------------------------------------------------------------------
记录器(Logger):提供日志相关功能的调用接口
处理器(Handler):将日志发送到合适的目的地
格式化器(Formatter):指明输出的日志记录的格式
过滤器(Filter):决定输出日志记录的粒度
-----------------------------------------------------------------------------------------------------------------
Logger:
创建实例:logger = logging.getLogger('example')
默认的日志级别是WARNING
,默认的处理器是StreamHandler
(即日志信息输出到标准输出),默认的格式化器Formatter(logging level:instance name:logging message
)。
Handler:
通过Logger对象的addHandler()
方法为Logger对象添加0个或多个Handler的子类对象,将日志信息输出到设置的地方。
Formatter
用于设置日志输出的格式,可直接初始化对象,即formatter=logging.Formatter(fmt=None, datefmt=None)
。默认的日志格式fmt
为%(asctime)s - %(levelname)s - %(messages)
,默认的时间格式datefmt
为%Y-%m-%d %H:%M:%S
。
Filter
可用于Logger对象或Handler对象,用于提供比日志等级更加复杂的日志过滤方式。Filter在日志功能配置中是非必须的,对日志消息过滤需求比较复杂时配置使用。
-----------------------------------------------------------------------------------------------------------------
3种方法配置日志:
a. 在Python代码中显示创建Logger,Handler,Formatter和Filter对象,并调用各对象的配置函数进行日志配置
b. 将配置信息写到配置文件,通过读取配置文件进行日志配置
c. 将配置信息写到Dict
,通过读取配置字典进行日志配置
-----------------------------------------------------------------------------------------------------------------
Simple_Example:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/01/24 9:57
# @Author : qf
# @Site :
# @File : mylogger.py
# @Software: PyCharm Community Edition
import logging
from logging.handlers import TimedRotatingFileHandler
import os
from utils import timeutilQF
# path = os.getcwd()
pathdir = os.path.dirname(os.getcwd())
datefile = timeutilQF.get_date()
# LOG_FILE = pathdir + '\\log\\' + datefile + '.log'
# LOG_FILE = 'F:\\myProject\\QFAutoFrame\\log\\default.log'
qf_formatter = logging.Formatter(
'%(asctime)s %(levelname)s %(threadName)s[%(thread)d] %(filename)s[line:%(lineno)d] : %(message)s')
qf_sh = logging.StreamHandler()
# qf_sh.setLevel(logging.WARNING)
qf_sh.setLevel(logging.INFO)
qf_sh.setFormatter(qf_formatter)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(qf_sh)
LOG_FILE = pathdir + '\\log\\' + datefile + '.log'
qf_tfh = TimedRotatingFileHandler(LOG_FILE, when="midnight", encoding='utf-8')
qf_tfh.setLevel(logging.INFO)
qf_tfh.setFormatter(qf_formatter)
logger.addHandler(qf_tfh)