写在前面
···日志系统是每个生产环境必须存在的, 以便记录程序的运行状况,博主此篇 分享Python成熟的日志方案,开始之前先看一段生产环境的日志配置(详细可追踪logging模块相关函数实现)
Python日志模块 logging
该模块定义了实现用于应用程序和库的灵活事件日志记录系统的函数和类。
一、 原理篇
日志等级划分(等级从上至下递增)
Level | When it`s used |
---|---|
DEBUG | 详细信息,通常在诊断问题时使用 |
INFO | 表示正常, 常用表示程序正常运行的日志等级 |
WARNING | 表示警告,一般表示程序不会中止运行但是可能存在问题待修复 |
ERROR | 表示执行错误,一般表示程序执行中的堆栈错误 |
CRITICAL | 表示严重错误,少见 |
若日志等级为 WARNING 则意味着仅跟踪此级别及更高级别的事件,跟踪的事件可以输出到控制台和文件 |
二、配置篇
1. python代码配置
- 1.按照日志大小滚动
def log_init(logname): # 定义一个RotatingFileHandler,最多备份5个日志文件,每个日志文件最大10M filehandler = logging.handlers.RotatingFileHandler(g_log_path, maxBytes=100*1024*1024, backupCount=5) # 输出到文件的格式 formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)d - [%(levelname)s] - %(message)s') filehandler.setFormatter(formatter) # 获取名为""的logger logger = logging.getLogger(logname) # 为logger添加handler logger.addHandler(filehandler) logger.setLevel(logging.DEBUG) # 定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准输出,并将其添加到当前的日志处理对象 console = logging.StreamHandler() console.setLevel(logging.INFO) formatter = logging.Formatter('%(filename)s:%(lineno)d - [%(levelname)s] - %(message)s') console.setFormatter(formatter) # 获取名为""的logger logger = logging.getLogger(logname) # 为logger添加handler logger.addHandler(console) return logger
- 2. 按照时间间隔滚动
def log_init(logname): # 定义一个TimeRotatingFileHandler,最多备份5个日志文件,每天滚动一次 filehandler = logging.handlers.TimeRotatingFileHandler(g_log_path, when='D', interval=1, backupCount=5) # 输出到文件的格式 formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)d - [%(levelname)s] - %(message)s') filehandler.setFormatter(formatter) # 获取名为""的logger logger = logging.getLogger(logname) # 为logger添加handler logger.addHandler(filehandler) logger.setLevel(logging.DEBUG) return logger
2. 字典信息配置
- 1.配置信息
version: 1 formatters: # 日志输出格式 simple: format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" handlers: # 处理器 console: class: logging.StreamHandler level: INFO formatter: simple stream: ext://sys.stdout console_err: class: logging.StreamHandler level: ERROR formatter: simple stream: ext://sys.stdout files: class: logging.handlers.RotatingFileHandler level: DEBUG formatter: simple filename: dump_homed.log maxBytes: 104857600 backupCount: 5 encoding: utf-8 loggers: # 项目日志配置 demo: level: DEBUG handlers: [console, files] propagate: no # 是否传播到上层日志(root) root: # 根日志, 如果某一日志在项目日志中找不到 则默认根日志输出 level: INFO handlers: [console_err]
日志的组件