【Python】基础部分 -- 常用模块 -- logging 日志记录
1. logging 日志记录
为python提供标准的日志接口,可以通过它存储各种格式的日志,logging的日志分为:debug(), info(), warning(), error() 和 critical() 5个级别。
1) 常用写法
import logging
#1.生成对象
logger = logging.getLogger('hello')
logger.setLevel(logging.DEBUG) #设置全局等级
#1.1全局设置
logging.basicConfig(filename='log_test.log',
level=logging.DEBUG,
format='%(asctime)s %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
#2.生成handler对象
ch = logging.StreamHandler()
fh = logging.FileHandler(filename)
#3.设置局域等级
ch.setLevel(logging.DEBUG)
fh.setLevel(logging.INFO)
#4.绑定对象
logger.addHandler(ch)
logger.addHandler(fh)
#5.设定格式
file_formatter = logging.Formatter('%(asctime)s %(name)s- %(levelname)s - %(message)s')
console_formatter = logging.Formatter('%(asctime)s %(name)s- %(levelname)s - %(message)s')
ch.setFormatter(console_formatter)
fh.setFormatter(file_formatter)
#6.输出
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
2) logger
提供应用程序可直接使用的接口
每个程序输出信息之前都要获得一个logger,logger 通常对应了程序的模块名,如:
LOG = logging.getLogger('chat.gui')
核心模块可以:
LOG = logging.getLogger('chat.kernel')
绑定handler和filters
Logger.setlevel(lel):指定handler输出的最低级别
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
3) handler
将(logger创建的)日志记录发送到合适的目标输出
Handler.setLevel(lel):指定输出最低级别
Handler.setFormatter(): 给这个handler选择格式
Handler.addFilter(filt)、Handler.removeFilter(filt): 新增或删除一个filter对象
附加hadler
logging.SteamHandler 终端输出
logging.FileHandler 文件输出
logging.handlers.RotatingFileHandler(filename, mode, maxbytes, backupcount) 根据日志文件大小,生成同名新日志文件(旧的自动被改备份名)
logging.TimedRotatingFileHandler(filename, when, interval, backupcount) 根据时间创建新的日志文件,when是时间间隔单位,interval是间隔大小
4) formatter
决定日志记录的最终输出格式,独立组件,可以跟handler组合
fh = logging.FileHandler('...')
formatter = logging.Formatter(%(格式名)s)
fh.setFormatter(formatter)
格式名
%(levelno)s 数字级别
%(levelname)s 文本级别
%(pathname)s 调用输出函数的完整路径名
%(filename)s 调用输出函数的文件名
%(module)s 调用输出函数的模块名
%(funcName)s 调用输出函数的函数名
%(lineno)s 调用日志输出函数的语句所在行
%(created)s 当前时间,用UNIX标准的浮点数表示时间
%(relativeCreated)d 输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是‘Y-m-d H-M-S,ms’
5) filter
如果你想对日志进行过滤,就可以自定义一个filter
class IgnoreBackuplogFilter(logging.Filter):
def filter(self, record):
return 'db backup' not in record.getMessage()
logger.addFilter(IgnoreBackuplogFilter())