python之logging模块

logging是python的日志库。我们在部署项目的时候, 不可能直接将所有的信息都输出到控制台中,所以就需要用它,把信息存储到日志文件中, 方便我们查看程序的运行情况,也可以在出现故障的时候,通过查找日志,快速定位。

咱们先来说说日志级别,默认是有六种日志级别

级别 数值
DEBUG 10
INFO 20
WARNING 30
ERROR 40
CRITIAL 50

默认是WARNING,只有WARNING、ERROR和CRITICAL级别的日志消息会被记录,而DEBUG和INFO级别的日志消息则不会被记录。你可以通过设置日志级别来改变默认级别。

接下来咱们说一下其他的东西:

logging模块采用了模块化设计,主要包含四种组件:

Loggers:记录器,提供应用程序代码能直接使用的接口

Handers:处理器,将记录器产生的日志发送至目的地

Filters:过滤器,提供更好的粒度控制,决定哪些日志会被输出

Formatters:格式化其,设置日志内容的组成结构和消息字段

1.Handers:将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方

ini 复制代码
StreamHandler 
标准输出 
创建方法:
sh=logging.StreamHandler(stream=None) 
FileHandler 将日志保存到磁盘文件的处理器 
创建方法:
fh=logging.FileHandler(filename,mode="a",encoding=None,delay=False) 
setFormatter():设置当前handler对象使用的消息格式

2.Formatters

perl 复制代码
构造方法: 
ft=logging.Formatter.__init__(fmt=None,datefmt=None,style='%') 
datefmt默认是%Y-%m-%d %H:%M:%s样式的 style参数默认为百分符%

最后,附上我测试的代码块

css 复制代码
import logging

from common.yaml_util import get_custom_dir


def setup_logger(name,log_file=None,level=logging.DEBUG):
    logger = logging.getLogger(name)
    #默认情况下,日志记录器的级别为 WARNING,
    logger.setLevel(level)
    # 创建StreamHandler对象并设置日志级别  输出到控制台
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.DEBUG)
    # 设置日志格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    stream_handler.setFormatter(formatter)
    # 将StreamHandler添加到Logger对象中
    logger.addHandler(stream_handler)
    # print(f"StreamHandler的日志级别: {stream_handler.level}")
    if log_file:
        file_handler = logging.FileHandler(log_file)
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)
        # print(f"FileHandler的日志级别: {file_handler.level}")
    return logger
相关推荐
moton20171 小时前
云原生:构建现代化应用的基石
后端·docker·微服务·云原生·容器·架构·kubernetes
何中应1 小时前
Spring Boot中选择性加载Bean的几种方式
java·spring boot·后端
web2u2 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
michael.csdn2 小时前
Spring Boot & MyBatis Plus 版本兼容问题(记录)
spring boot·后端·mybatis plus
Ciderw3 小时前
Golang并发机制及CSP并发模型
开发语言·c++·后端·面试·golang·并发·共享内存
Мартин.3 小时前
[Meachines] [Easy] Help HelpDeskZ-SQLI+NODE.JS-GraphQL未授权访问+Kernel<4.4.0权限提升
后端·node.js·graphql
程序员牛肉3 小时前
不是哥们?你也没说使用intern方法把字符串对象添加到字符串常量池中还有这么大的坑啊
后端
烛阴3 小时前
Go 语言进阶必学:&^ 操作符,高效清零的秘密武器!
后端·go
网络风云3 小时前
golang中的包管理-下--详解
开发语言·后端·golang
京东零售技术4 小时前
一次线上生产库的全流程切换完整方案
后端