Logging库的使用

LOgging库介绍:

        logging库是Python内置的日志处理库,在输出运行信息比print更灵活,可控。

核心概念:

        1.日志级别(从高到低,默认值输出warning以及以上的级别):

                --DEBUG: 调试信息(变量值,函数调用细节)

                --INFO:普通运行信息(程序成功启动,确认流程正常)

                --WARNING:警告错误(不影响运行)

                --ERROR:错误信息(文件读取时便,功能部分受阻)

                --CRITICAL:严重错误(数据库连接失败,程序无法继续运行)

        2.四大组件:

                --Logger:日志入口(用户直接调用的接口)

                --Handler:日志输出目标

                --Formatter:日志格式

                --Filter:日志过滤

使用方法:

1.直接输出不同级别的日志:                     

import logging

# 输出不同级别的日志
logging.debug('调试信息')#级别低于WARRNING,默认不进行打印
logging.info('程序运行信息') #级别低于WARRNING,默认不进行打印
logging.warning('警告错误i') #默认打印
logging.error('错误信息')
logging.critical('严重错误')

          输出结果:

     

2.基础配置

                使用logging.basicConfig()配置日志的级别,格式,输出位置等(必须在输出日志前调用):

                basicConfig()主要参数:

                        --level:设置日志的最低输出级别(例如:level = logging.debug,表示输出debug以及以上所有的级别日志)

                        --format:指定输出格式(例如:

logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')

输出结果:

常用格式占位符

  • %(asctime)s:日志记录的时间(默认格式为 YYYY-MM-DD HH:MM:SS,mmm)。
  • %(levelname)s:日志级别(如 INFOERROR)。
  • %(message)s:日志的具体内容(即 logging.info("内容") 中的 “内容”)。
  • %(name)s:日志器的名称(默认是 root,即根日志器)。
  • %(filename)s:产生日志的文件名。
  • %(lineno)d:产生日志的代码行号

                          --datefmt:自定义 %(asctime)s 的时间格式(需配合 format 使用)。

logging.basicConfig(
    format='%(asctime)s - %(message)s',
    datefmt='%Y/%m/%d %H:%M:%S'  # 时间格式改为“年/月/日 时:分:秒”
)

                          --filename:指定日志输出路径(设置了这个参数,日志会写入文件中)

                          --filemode:指定日志文件的打开方式(设置了filename后才有效)

                          --stream:指定日志的输出流(数据传输的通道如果同时指定了 stream 和 filename 参数,stream 会被忽略 —— 因为 filename 本质是指定了一个 “文件流”,日志系统会优先使用文件流作为输出通道)

综合使用:

        这里给出一个综合使用的模板,相较于basicConfig(适用于简单的日志输出),综合使用用到了4大组件更适合日常项目中的使用

import logging

# 1. 创建自定义Logger(指定名称,避免与其他模块冲突)
logger = logging.getLogger("my_app")
logger.setLevel(logging.DEBUG)  # 日志器的级别(低于此级别的日志会被过滤)

# 2. 创建Handler(输出目标)
# 2.1 输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 控制台只输出INFO及以上

# 2.2 输出到文件
file_handler = logging.FileHandler("app.log")
file_handler.setLevel(logging.DEBUG)  # 文件输出DEBUG及以上

# 3. 创建Formatter(日志格式)
# 控制台格式:简洁
console_formatter = logging.Formatter("%(levelname)s: %(message)s")
# 文件格式:详细(包含时间、模块名、行号)
file_formatter = logging.Formatter(
    "%(asctime)s - %(name)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s"
)

# 4. 给Handler绑定Formatter
console_handler.setFormatter(console_formatter)
file_handler.setFormatter(file_formatter)

# 5. 给Logger添加Handler(可以添加多个,实现多目标输出)
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 测试:使用自定义Logger输出日志
logger.debug("调试:进入login函数")  # 只输出到文件(控制台级别为INFO)
logger.info("用户admin登录成功")  # 同时输出到控制台和文件
logger.error("登录失败:密码错误")  # 同时输出到控制台和文件

逐行解释:

1.

logger = logging.getLogger("my_app")

创建了一个自定义的logger,并且将这个记录日志器的命名为‘myapp’

logging.getLogger()是创建获取日志记录器的方法

Logger(日志记录器)负责产生日志

2.

logger.setLevel(logging.DEBUG)

设置日志记录器的最低日志级别,这里是DEBUG

3.

console_handler = logging.StreamHandler()

创建控制台处理器代码,将日志信息输出到控制台

Handler(处理器—)负责将日志发送到指定的地方

4.

console_handler.setLevel(logging.INFO)

控制台只输出INFO及以上的日志

5.

file_handler = logging.FileHandler("app.log")
file_handler.setLevel(logging.DEBUG)

这里是输出到文件,文件名是app.log
志记录DEBUG及以上的内容

6.

console_formatter = logging.Formatter("%(levelname)s: %(message)s")

创建控制台日志格式

7.

file_formatter = logging.Formatter(
    "%(asctime)s - %(name)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s"
)

创建文件格式

8.

console_handler.setFormatter(console_formatter)

将之前输出控制台的Handler绑定格式Formatter

 

9.

file_handler.setFormatter(file_formatter)

将之前输出文件的Handler绑定格式Formatter

10.

logger.addHandler(console_handler)
logger.addHandler(file_handler)

为logger(日志记录器)添加Handler(处理器)

作用:

让同一个日志记录器产生的日志,能够同时输出到多个目的地(如控制台和文件),实现日志的 “多渠道分发”。

如果出现文件log出现乱码的情况,可以在5,也就是创建log文件这里加上encoding = ‘utf-8’

file_handler = logging.FileHandler("app.log",encoding = 'UTF-8')
file_handler.setLevel(logging.DEBUG)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

...Rain...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值