Python - logging模块
2022-03-30 17:12 起个昵称 阅读(21) 评论(0) 编辑 收藏 举报在logging模块的基础上,自定义出自己想要的格式
学习记录:
1 import logging 2 3 4 # 收集器名字,默认root 5 logger = logging.getLogger('自创日志') 6 # 级别 7 logger.setLevel(logging.INFO) 8 # 渠道 9 stream_handle = logging.StreamHandler() 10 file_handle = logging.FileHandler('log.log', encoding='utf-8') 11 # 内容格式 12 fmt = '%(asctime)s | %(levelname)s | %(pathname)s | line:%(lineno)d | %(message)s' 13 formatter = logging.Formatter(fmt) 14 # 关联渠道和格式 15 stream_handle.setFormatter(formatter) 16 file_handle.setFormatter(formatter) 17 # 设置好的渠道添加到日志收集器上 18 logger.addHandler(stream_handle) 19 logger.addHandler(file_handle) 20 21 logger.info('test') 22 logger.debug('debug级别') 23 logger.error('error级别')
日志量大时,可以:按时间生成日志文件,按大小生成日志文件
from logging import handlers
RotatingFileHandler() TimedRotatingFileHandler()
日志名字
日志级别(Level):DEBUG、INFO、WARNING、ERROR、CRITICAL(FATAL)
输出渠道(Handler):控制台(StreamHandler)、文件(FileHandler)
日志内容(Formatter):时间 - 哪个文件 - 哪行代码 - 输出内容
进行封装
对自定义的MyLogger类进行了实例化,其他模块调用这个类时,直接调用对象使用 logger.xxx()
1 import logging 2 3 4 class MyLogger(logging.Logger): 5 6 def __init__(self, name, level=logging.DEBUG, file=None): 7 super().__init__(name, level) 8 9 # 输出内容的格式 10 fmt = '%(asctime)s | %(levelname)s | %(pathname)s | line:%(lineno)d | %(message)s' 11 formatter = logging.Formatter(fmt) 12 13 # 控制台输出设置 14 stream_handle = logging.StreamHandler() 15 stream_handle.setFormatter(formatter) 16 self.addHandler(stream_handle) 17 18 # 文件输出设置 19 if file: 20 file_handle = logging.FileHandler(file, encoding='utf-8') 21 file_handle.setFormatter(formatter) 22 self.addHandler(file_handle) 23 24 25 logger = MyLogger('收集器名字', file='日志文件名称.log') 26 logger.info("test info") # 测试
优化:某些参数可以写在配置文件,然后读取。这样不同项目可以只改配置文件,而不需要改这个函数里的代码