python_loggin日志处理

一。

1.引入

import logging

日志的作用:

1)出现问题后,排查问题使用

2.初识

日志的等级按照由低到高的顺序排列:

1)debug

2)info

3)warning

4)error

5)critical

logging.debug('这是一个调试级别的日志')
logging.info('正常日志')
logging.warning('这是警告级别的日志')
logging.error('已经出错了')
logging.critical('程序已经停止了')
运行结果:

 

语言内置的logging模块默认是root级别的,只收集warning级别以上的日志

源码:

 

 

 

3.自定义

1)在控制台打印日志

#1)创建日志收集器,其中getLogger(这里可以不用写名字,若不写名字日志默认为root模式)
root_logging=logging.getLogger('class_18')
#2)设置收集器,收集日志等级
root_logging.setLevel('DEBUG')
#3)设置输出处理器,在当前控制台打印日志
stream_handler=logging.StreamHandler()
#设置控制台日志输出等级
stream_handler.setLevel('INFO')
#4)把输出处理器添加到收集器上面
root_logging.addHandler(stream_handler)
#5)打印的日志信息
root_logging.info('新写的info日志')
root_logging.debug('新写的debug日志')
root_logging.warning('新写的warning日志')
root_logging.error('新写的error日志')
root_logging.critical('新写的critical日志')

运行结果:

 

 注意:打印的结果与收集器规定的等级与控制台允许输出的等级是包含关系

 

#6)规定日志输出格式
fmt=logging.Formatter('%(asctime)s -- wenjianming:%(filename)s -- hanghao:%(lineno)d -- %(levelname)s:%(message)s')
stream_handler.setFormatter(fmt)
#7)打印设定格式的日志信息
root_logging.info('新写的info日志')
root_logging.debug('新写的debug日志')
root_logging.warning('新写的warning日志')
root_logging.error('新写的error日志')
root_logging.critical('新写的critical日志')

运行结果:

 

 

#2)在文件中打印日志:

#创建日志收集器,不写名字默认为root等级
root_logging=logging.getLogger()
#设置日志收集器收集日志的等级
root_logging.setLevel('INFO')

#创建文件收集器,并传入日志路径
file_handler=logging.FileHandler('log.txt',encoding='utf-8')
#设置文件收集器收集日志的等级
file_handler.setLevel('INFO')
#把输出器添加到收集器上
root_logging.addHandler(file_handler)
#设置log的格式
fmt=logging.Formatter('%(asctime)s -- wenjianming:%(filename)s -- hanghao:%(lineno)d -- %(levelname)s:%(message)s')
#添加到文件收集器里面
file_handler.setFormatter(fmt)
#输入需要打印的日志
root_logging.info('新写的info日志')
root_logging.debug('新写的debug日志')
root_logging.warning('新写的warning日志')
root_logging.error('新写的error日志')
root_logging.critical('新写的critical日志')
运行结果:

 

 

4.封装成类

方法一:重写

def get_logger(
name=None,
file=None,
file_path='log.txt',
loggerlevel='DEBUG',
stream_level='INFO',
file_level='INFO',
fmt=('%(asctime)s -- wenjianming:%(filename)s -- hanghao:%(lineno)d -- %(levelname)s:%(message)s')
):
#获取收集器
logger=logging.getLogger(name)
#设置收集器日志级别
logger.setLevel(loggerlevel)

#输出管理器
stream_handler=logging.StreamHandler()
#设置输出管理器级别
stream_handler.setLevel(stream_level)
#绑定输出管理器
logger.addHandler(stream_handler)
# 设置输出格式
fmt = logging.Formatter(fmt)
stream_handler.setFormatter(fmt)
if file:
file_handler=logging.FileHandler(file_path,encoding='utf-8')
file_handler.setLevel(file_level)
logger.addHandler(file_handler)
file_handler.setFormatter(fmt)

return logger

 

方法二:超继承

class Logger_2(logging.Logger):
def __init__(self,
name=None,
file=None,
file_path='log.txt',
loggerlevel='DEBUG',
stream_level='INFO',
file_level='INFO',
fmt=('%(asctime)s -- wenjianming:%(filename)s -- hanghao:%(lineno)d -- %(levelname)s:%(message)s')
):
super().__init__(name,loggerlevel)

# 设置收集器日志级别
self.setLevel(loggerlevel)

# 输出管理器
stream_handler = logging.StreamHandler()
# 设置输出管理器级别
stream_handler.setLevel(stream_level)
# 绑定输出管理器
self.addHandler(stream_handler)
# 设置输出格式
fmt = logging.Formatter(fmt)
stream_handler.setFormatter(fmt)
if file:
file_handler = logging.FileHandler(file_path, encoding='utf-8')
file_handler.setLevel(file_level)
self.addHandler(file_handler)
file_handler.setFormatter(fmt)

posted @ 2020-05-28 23:28  1142783691  阅读(403)  评论(0编辑  收藏  举报