ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

      • 常见规范与运行方式
      • 变量与垃圾回收机制
      • 输入与格式化输出
      • 运算符
      • 流程控制语句
      • 浅拷贝和深拷贝
      • 常用数据类型与分类
      • 数据类型方法
      • 字符编码
      • 文件操作
      • 函数与参数
      • 命名空间与作用域
      • 闭包函数与装饰器
      • 迭代器与生成器
      • 三元表达式与生成式
      • 函数递归
      • 面向过程式和函数式编程
      • 模块与包
      • 程序设计目录参考
      • 常用内置模块或函数
      • 序列化和猴子补丁
      • 日志模块-logging
        • logging模块输出日志
        • 配置logging模块的基本设置
        • logging日志配置字典
        • logging配置字典的使用
        • logger日志名命名
        • logging日志轮转
    • 类与面向对象

    • 并发编程

    • Web编程

    • 模块笔记

    • 其他

  • C笔记

  • C++笔记

  • Arduino笔记

  • Dev
  • Python笔记
  • 基础知识
Hoshinozora
2023-02-15
目录

日志模块-logging

# logging模块输出日志

# 导入模块

  • import logging
  • 日志记录程序运行过程中的关键信息,非常重要不能轻易的删除

# 按日志级别输出日志

  • 越往下级别越高,触发条件也应当越严格

# 记录调试级别日志

  • logging.debug('调试日志信息')
  • 10 调试级别 -- 在程序开发调试时用

# 记录消息级别日志

  • logging.info('信息日志信息')
  • 20 消息级别 -- 正常运行的输出信息

# 记录警告级别日志

  • logging.warning('警告日志信息')
  • 30 警告级别 -- 现在运行没问题、但是以后可能出现错误的警告信息

# 记录错误级别日志

  • logging.error('错误日志信息')
  • 40 错误级别 -- 程序已经出现错误的信息

# 记录灾难级别日志

  • logging.critical('灾难日志信息')
  • 50 灾难级别 -- 发生的错误非常严重、可能会导致程序的全面崩溃的信息


# 配置logging模块的基本设置

# logging.basecConfig(基本配置)

  • 了解即可,一般用配置字典来进行配置
  • 例如
    • logging.basecConfig(filename='...',format='...',datefmt='...')

# 日志输出位置

  • filename='日志文件路径'
    • 不指定则只输出到终端屏幕
    • 指定了则只输出到文件

# 日志格式

  • format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s'
    • %(asctime)s -- 调用日志函数时的格式化时间
    • %(name)s -- 日志文件名称
    • %(levelname)s -- 日志级别
    • %(levelname)s -- 调用日志函数的模块名
    • %(funcName)s -- 调用日志函数的函数名
    • %(lineno)d -- 调用日志函数的代码行数
    • %(message)s -- 用户输出的消息

# 时间格式

  • datefmt='%Y-%m-%d %H:%M:%S %p'

# 日志输出级别

  • level=30
    • 默认是30,也就是warning级别
    • 表示只有warning及以上级别的日志,才会被输出


# logging日志配置字典

# 一般写到配置文件或模块中


# 配置字典

LOGGING_DIC = {
    'version': 1.0,
    'disable_existing_loggers': False,
    'formatters': {
    '日志格式名1': {'format': '日志格式'},
    '日志格式名2': {'format': '日志格式'}
    },
    'handlers': {
        # 输出到屏幕
        '日志处理方式名1': {
            # 可数字、也可是大写的级别名
            'level': '日志级别',
            # logging.StreamHandler表示指定输出到屏幕
            'class': 'logging.StreamHandler',
            # formatters中配置的格式名
            'formatter': '日志格式名'
        # 输出到文件
        '日志处理方式名2': {
            'level': '日志级别',
            # logging.FileHandler表示指定输出到文件
            'class': 'logging.FileHandler',
            'formatter': '日志格式名',
            # 指定输出日志的文件路径
            'filename': '日志文件路径',
            # 指定输出到文件的编码格式
            'encoding': '编码格式'
        }},
    }
    'loggers': {
        # logger名
        '日志名1': {
            # 日志输出位置,可指定多个
            'handlers': [handler名1, handler名2],
            # 在这里会先过滤一次,到handlers又会过滤一次
            'level': '日志级别',
            # 默认为True会向上级传递,通常关闭使日志更独立
            'propagate': False
        },
        '日志名2': {... ...}
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  • disable_existing_loggers
    • 是否禁用已经存在的logger实例
    • 一般设为False即可
  • formatters
    • 指定日志格式,日志格式内容一般可以用变量传入,方便修改
  • handlers
    • 日志输出位置
  • loggers
    • 产生日志并传递给handlers
    • 大多数日志都是传输到一个文件,除非特殊场景


# logging配置字典的使用

# 导入模块

  • from logging import config, getLogger

# 导入日志配置字典

  • config.dictConfig(LOGGING_DIC)

# 获得指定的logger对象

  • logger01 = getLogger('logger名')

# 发送对应级别的日志到logger所对应的handler

  • logger01.日志级别('日志信息')
  • 例如
    • logger01.info('This is a info log!')


# logger日志名命名

# 日志名是区分日志业务功能种类的一种非常重要的标识


# 例如

  • userTrade
    • 用户交易相关的日志,logger名就应当与其相关

# 代码冗余问题

  • 一类下的相关业务又可能非常多,而其中的logger配置又一样,这就会造成代码冗长
  • 这个时候,可以创建一个空日志名的logger
  • 这样在我们生成logger对象时,如果指定的日志名没有在loggers下找到,就会使用默认的""下的配置
  • 但日志记录的日志名,会是我们实例化时传入的名字


# logging日志轮转

# 介绍

  • 日志文件会随着时间越来越大,为了防止日志文件过大造成打开文件过慢且占用内存多
  • 就需要日志轮转,也就是将日志按大小或者时间进行分割,分割成多个日志文件
  • 超过大小后,会将日志文件以前的内容,全部剪切到日志切割文件,然后将新内容写入日志文件

# 设置方法

  • handlers -- 日志输出位置中
'handlers': {
    '日志处理方式名': {
            'level': '日志级别',
            # 保存到文件并进行日志轮转
            'class': 'logging.handlers.RotatingFileHandler',
            'formatter': '日志格式名',
            'filename': '日志文件路径',
            'encoding': '编码格式',
            # 日志文件最大字节大小,此处是5M
            'maxBytes': 1024*1024*5,
            # 分割的日志文件最大保留数量,超过则最早的将被删除
            'backupCount': 10
        }}
1
2
3
4
5
6
7
8
9
10
11
12
13
#logging#日志
序列化和猴子补丁
面向对象与类

← 序列化和猴子补丁 面向对象与类→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式