python logging原理篇


写在前面
···日志系统是每个生产环境必须存在的, 以便记录程序的运行状况,博主此篇 分享Python成熟的日志方案,开始之前先看一段生产环境的日志配置(详细可追踪logging模块相关函数实现)

Python日志模块 logging

官方文档 - logging

该模块定义了实现用于应用程序和库的灵活事件日志记录系统的函数和类。

一、 原理篇

日志等级划分(等级从上至下递增)
LevelWhen 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]
    

日志的组件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值