首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在不同的Python模块中自定义日志记录

如何在不同的Python模块中自定义日志记录

原创
作者头像
华科云商小徐
发布2024-12-11 09:42:18
发布2024-12-11 09:42:18
1.8K00
代码可运行
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫
运行总次数:0
代码可运行

在不同的 Python 模块中自定义日志记录是一种常见的需求,尤其是在构建复杂的应用程序时。可以通过以下步骤实现模块间一致性、灵活性和独立的日志记录。

1、问题背景

在一个应用程序中,有多个模块配置了日志记录。 所有这些模块都将日志发送到同一个文件。 比如存在这样的一个Client.py脚本:

代码语言:javascript
代码运行次数:0
运行
复制
import logging
import Settings
import actions1
import actions2
​
def initLogging(logToConsole=False):
  global logger
  logger=Settings.customLogging(Name,Dir,FileName,Level,CmdId,logToConsole)
  logger.info("Starting client")
​
def initActions():
  actions.init(logger)

在Settings.py脚本中,存在一个 函数initLogging,用于初始化日志记录:

代码语言:javascript
代码运行次数:0
运行
复制
import logging
import logging.handlers
​
def initLogging(name,dir,file,cmdId,logToConsole=false):
  logger=logging.getLogger(name)
  **setup the logger properties with loglevels, formatting etc**
  return logger

在actions1.py脚本中,存在一个函数init,用于初始化日志记录:

代码语言:javascript
代码运行次数:0
运行
复制
def init(plogger):
  global logger
  logger=plogger
​
def some_function()
  **do something**
  logger.info("some text")

存在多个actions1/2/3.py模块,并且希望为这些操作脚本中的每个脚本设置不同的日志级别和不同的日志格式。 目标是希望在调用init()方法时初始化这些自定义设置。

2、解决方案

可以使用logging.getLogger(name)方法从日志记录模块获取日志记录器对象,而不是创建一个单独的全局日志记录器。 这样可以获取一个日志记录器对象。 现在可以为日志记录器对象设置其他参数。

代码语言:javascript
代码运行次数:0
运行
复制
import logging
​
# 获取名为'my_logger'的日志记录器
logger = logging.getLogger('my_logger')
​
# 设置日志记录器级别
logger.setLevel(logging.DEBUG)
​
# 创建文件处理程序
file_handler = logging.FileHandler('my_logger.log')
​
# 创建流处理程序
stream_handler = logging.StreamHandler()
​
# 将处理程序添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
​
# 设置日志格式
logger.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
​
# 记录一些信息
logger.info('This is an info message')
logger.debug('This is a debug message')
logger.error('This is an error message')

通过这种方式,可以为不同的模块创建不同的日志记录器对象,并为每个日志记录器对象设置不同的日志级别和日志格式。

以下是使用logging.getLogger(name)方法的示例:

代码语言:javascript
代码运行次数:0
运行
复制
import logging
​
# 创建名为'my_logger'的日志记录器
logger = logging.getLogger('my_logger')
​
# 设置日志记录器级别
logger.setLevel(logging.DEBUG)
​
# 创建文件处理程序
file_handler = logging.FileHandler('my_logger.log')
​
# 创建流处理程序
stream_handler = logging.StreamHandler()
​
# 将处理程序添加到日志记录器
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
​
# 设置日志格式
logger.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
​
# 记录一些信息
logger.info('This is an info message')
logger.debug('This is a debug message')
logger.error('This is an error message')
​
# 创建另一个名为'my_other_logger'的日志记录器
logger2 = logging.getLogger('my_other_logger')
​
# 设置日志记录器级别
logger2.setLevel(logging.WARNING)
​
# 创建文件处理程序
file_handler2 = logging.FileHandler('my_other_logger.log')
​
# 创建流处理程序
stream_handler2 = logging.StreamHandler()
​
# 将处理程序添加到日志记录器
logger2.addHandler(file_handler2)
logger2.addHandler(stream_handler2)
​
# 设置日志格式
logger2.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
​
# 记录一些信息
logger2.info('This is an info message')
logger2.debug('This is a debug message')
logger2.error('This is an error message')

在这个示例中,创建了两个不同的日志记录器对象:'my_logger'和'my_other_logger'。 然后,为每个日志记录器对象设置了不同的日志级别和日志格式。 最后,记录了信息、调试和错误信息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档