使用Python的logging.config.fileConfig配置日志

本文详细介绍了Python中使用logging.config.fileConfig方式配置日志的方法,通过解析conf配置文件实现不同类型的日志输出,包括控制台、单文件及滚动文件日志。

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

Python的logging.config.fileConfig方式配置日志,通过解析conf配置文件实现。文件 logglogging.conf 配置如下:

[loggers]
keys=root,fileLogger,rotatingFileLogger

[handlers]
keys=consoleHandler,fileHandler,rotatingFileHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_fileLogger]
level=DEBUG
# 该logger中配置的handler
handlers=fileHandler
# logger 的名称
qualname=fileLogger
propagate=0

[logger_rotatingFileLogger]
level=DEBUG
# 这样配置,rotatingFileLogger中就同时配置了consoleHandler,rotatingFileHandler
# consoleHandler 负责将日志输出到控制台
# rotatingFileHandler 负责将日志输出保存到文件中
handlers=consoleHandler,rotatingFileHandler
qualname=rotatingFileLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('logs/logging.log', 'a')

[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
level=WARNING
formatter=simpleFormatter
args=("logs/rotating_logging.log", "a", 1*1024*1024, 5)

[formatter_simpleFormatter]
#format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
format=%(asctime)s - %(module)s - %(thread)d - %(levelname)s : %(message)s
datefmt=%Y-%m-%d %H:%M:%S

以上配置文件主要包含以下几部分:

  1. loggers : 配置logger信息。必须包含一个名字叫做root的logger,当使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger("fileLogger") 方式进行调用
  2. handlers:定义声明handlers信息。常用的handlers包括 StreamHandler(仅将日志输出到kong控制台)、FileHandler(将日志信息输出保存到文件)、RotaRotatingFileHandler(将日志输出保存到文件中,并设置单个日志wenj文件的大小和日志文件个数)
  3. formatter : 设置日志格式
  4. logger_xxx : 对loggers中声明的logger进行逐个配置,且要一一对应
  5. handler_xxx : 对handlers中声明的handler进行逐个配置,且要一一对应
  6. formatter_xxx : 对声明的formatterjinx进行配置

  • 代码示例
logging.config.fileConfig(“logging.conf”)

# 输出日志到控制台,获取的是root对应的logger
console_logger = logging.getLogger()

# 输出日志到单个文件
file_logger = logging.getLogger(name="fileLogger")

# rotatingFileLogger中额consoleHandler输出到控制台,rotatingHandler输出日志到文件
rotating_logger = logging.getLogger(name="rotatingFileLogger")

  • 友情提示

进行以上配置后,在项目中需要进行日志输出的地方通过logging.getLogger()方式就可以获取到du应的logger,然后就可以使用logger.info("xxx")jinx进行日志输出了。

使用这种方式配置日志,一定要在项目的入口函数中就调用 logging.config.fileConfig(“logging.conf”)函数,因为 logging.conf 文件中,在handler中配置的是日志文件的相对地址,如果在其他代码文件中进行调用,由于相对地址的原因,将导致日志文件会出现在yixi意想不到的位置。

### Python `logging.config` 使用方法及配置示例 #### fileConfig 方法简介 通过 `fileConfig()` 可以从外部配置文件加载日志设置。此方法接受两个主要参数:一个是配置文件路径,另一个是可选的关键字参数,默认值通常不需要更改[^2]。 ```python import logging.config # 加载配置文件并初始化日志记录器 logging.config.fileConfig('logging.ini') logger = logging.getLogger('root') # 记录一条消息 logger.info("This is an info message.") ``` 这种方法适合于希望将日志配置分离到独立文件中的场景,便于管理和维护不同环境下的日志级别、格式化样式等属性[^4]。 #### dictConfig 方法详解 对于更复杂的配置需求,则可以采用基于字典对象的方式来进行配置——即 `dictConfig()` 函数。它允许开发者直接在代码内部构建完整的日志系统结构描述,并传递给该函数来应用这些设定[^1]。 下面是一个简单的例子展示如何利用 YAML 文件作为源数据并通过 Python 的 `yaml` 库解析成字典再传入 `dictConfig()`: ```python import logging.config import yaml import os class Logger(): def __init__(self, logger_name=''): self.logger_name = logger_name cur_dir = os.path.dirname(__file__) log_conf_path = os.path.join(cur_dir, 'logconf', 'trflog.yaml') with open(log_conf_path, 'r', encoding="utf8") as f: config_dict = yaml.safe_load(f.read()) # 初始化日志配置 logging.config.dictConfig(config_dict) def get_logger(self): return logging.getLogger(self.logger_name) if __name__ == "__main__": my_logger = Logger().get_logger() my_logger.error("An error occurred!") ``` 这段代码展示了怎样封装一个类用于管理多个模块共享的日志实例,同时也体现了灵活调整日志行为的能力[^3]。 #### 日志配置建议 为了确保项目中所有组件都能正确访问所需的日志设施,在应用程序启动阶段尽早执行一次全局性的日志初始化操作是非常重要的。特别是当使用相对路径指定日志输出位置时,这一点尤为重要,因为它能防止因工作目录变化而导致错误的日志存储地点。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值