指定类的logger日志输出到指定文件中_Python日志模块

本文介绍了Python的Logging模块,包括日志器、处理器、过滤器和格式器四大组件及其关系,详细讲解了如何配置日志级别和将日志输出到文件,帮助开发者掌握日志管理的基本技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、课程目标

295ce849c24ea868b9390b89375c2895.png

熟悉并能使用日志处理的模块来收集日志到指定的地方,如控制台、文件,并能够配置常用的参数满足实际的应用场景。

二、第一个日志处理程序

1.日志输出程序
import logging.config

# 最简单的日志配置demo
def simple():
    # 加载配置文件
    logging.config.fileConfig("logger.conf")
    # 获取日志器
    logger = logging.getLogger("simple")
    # 打印日志
    logger.debug("这是调试日志.")
    logger.info("这是提示信息日志.")
    logger.warning("这是警告日志.")
    logger.error("这是错误日志.")
    logger.critical("这是严重bug.")

# 同时输出到文件和控制台的日志配置
def print_log_file():
    # 加载配置文件
    logging.config.fileConfig("logger2file_and_console.conf")
    # 获取日志器
    logger = logging.getLogger("example01")
    # 打印日志
    logger.debug("这是调试日志.")
    logger.info("这是提示信息日志.")
    logger.warning("这是警告日志.")
    logger.error("这是错误日志.")
    logger.critical("这是严重bug.")
2.日志配置文件
logger.conf,输出到控制台:
[loggers]
keys=root,simple

[handlers]
keys=consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_simple]
level=DEBUG
handlers=consoleHandler
qualname=simple
propagate=0

[handler_consoleHandler]
class=StreamHandlerlevel=DEBUGformatter=simpleFormatterargs=(sys.stdout,)
[formatter_simpleFormatter]format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 

运行结果

2018-08-07 11:38:28,429 - simple - DEBUG - 这是调试日志.
2018-08-07 11:38:28,429 - simple - INFO - 这是提示信息日志.
2018-08-07 11:38:28,429 - simple - WARNING - 这是警告日志.
2018-08-07 11:38:28,429 - simple - ERROR - 这是错误日志.
2018-08-07 11:38:28,429 - simple - CRITICAL - 这是严重bug.

三、Logging模块

日志是跟踪某些软件运行时发生的事件的手段。该软件的开发人员将日志记录调用添加到他们的代码中,以指示发生了某些事件。

1.Logging模块四大组件
1)组件名称

Logger(日志器):日志记录组件公开应用程序代码直接使用的接口。
Handler(处理器):日志处理组件将日志记录(由记录器创建)发送到相应的目标。
Filter(过滤器):日志过滤组件提供更精细的输出条件来确定要输出的日志记录。
Formatter(格式器):日志格式化组件指定最终输出中日志记录的布局。

2)    关系描述

日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,如:文件、sys.stdout(控制台)、网络等;
不同的处理器(handler)可以将日志输出到不同的位置;
日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置;
每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志;
每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。

2.日志级别

日志可以根据它们用于追踪的事件的级别或严重程度命名的。标准级别及其适用性如下所述(按严重性的升序排列):
即 CRITICAL > ERROR > WARNING > INFO > DEBUG

级别使用场景
DEBUG(10)很详细的信息, 一般在调试排错的时候查看
INFO(20)确认程序执行是否按预期执行
WARNING(30)发生了意外的事件信息,或者不久以后可能出现的问题。并且所产生的事件不会让程序终止或者出现异常
ERROR(40)由于出现严重的问题,使得程序不能执行某些功能。
CRITICAL(50)一个严重的错误,使得程序本身可能无法继续运行
3.简单的例子
import logging

# 可以看到在控制台打印输出
logging.error('%s学习Python是个错误!', "没有毅力")
logging.warning('这只是一个警告而已,请忽略!')
# 不能看到打印
logging.info('不好意思,这只是个信息提示,没权显示!')

运行结果:

ERROR:root:没有毅力学习Python是个错误!
WARNING:root:这只是一个警告而已,请忽略!
4.日志输出到文件
import logging.config

# 加载配置文件
logging.config.fileConfig("logger_out_file.properties")
# 选择日志器
logger = logging.getLogger("example01")

logger.error('%s学习Python是个错误!', "abc")
logger.warning('这只是一个警告而已,请忽略!')
logger.info('不好意思,这只是个信息提示,没权显示!')
logger.debug('这是个调戏!')

logger_out_file.properties内容,注意文件内容为GBK编码,也可以去除中文注释:

###############################################
[loggers]
keys=root

# root日志器
[logger_root]
#日志等级
level=DEBUG
# 指定处理器
handlers=hand01
# 日志器的名称
qualname=root
# 是否能够传播,propagete=0,表示输出日志,但消息不传递;
# propagate=1是输出日志,同时消息往更高级别的地方传递。
# root为最高级别。
propagate=0
# 指定编码格式
encoding=UTF-8

[handlers]
keys=hand01

# hand01处理器
[handler_hand01]
# 指定处理器类
class=FileHandler
# 日志级别level=INFO
# 指定格式器formatter=form01
# 处理器类参数, 第一个是文件path,第二个是文件打开方式a表示追加,w表示重写args=('logs/file_log.log', 'a')
[formatters]keys=form01
# 格式器
[formatter_form01]
# 格式化的模板format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
# 指定日期格式
#datefmt=%a, %d %b %Y %H:%M:%S
datefmt=%Y-%m-%d %H:%M:%S, %a

最后,我们进入视频环节。

日志入门

日志文件-日志级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值