
在不同的 Python 模块中自定义日志记录是一种常见的需求,尤其是在构建复杂的应用程序时。可以通过以下步骤实现模块间一致性、灵活性和独立的日志记录。
1、问题背景
在一个应用程序中,有多个模块配置了日志记录。 所有这些模块都将日志发送到同一个文件。 比如存在这样的一个Client.py脚本:
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,用于初始化日志记录:
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,用于初始化日志记录:
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)方法从日志记录模块获取日志记录器对象,而不是创建一个单独的全局日志记录器。 这样可以获取一个日志记录器对象。 现在可以为日志记录器对象设置其他参数。
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)方法的示例:
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 删除。