自定义日志类 Python 范围

0 投票
1 回答
564 浏览
提问于 2025-04-18 04:33

下面是要考虑的开发环境。

有少量的Python模块,每个模块里包含一个或多个类。还有一个主模块,用来调用这些类。我们有一个自定义的日志模块,叫做logger,里面有一个类叫Logger。假设我用debug的日志级别来调用主执行类。我的问题是,怎么才能让这个日志级别在其他所有调用中都能继承,包括其他类、那些类里的方法,以及主模块里的函数等等……

比如,Logger对象是这样调用的:log=Logger(0)(日志级别是一个整数,这样做是为了和我们在其他脚本中使用的语法一致,比如shell脚本,而不是Python)。

我最终的目标是让代码里充满log.log_debug('debug message')log.log_error('error message'),但只有在选择了正确的log_level时才真正打印消息。如果可能的话,只希望在主模块里有一次

from logger import Logger

调用。

谢谢你的时间。

==================================

编辑

在主执行模块里,有一个main()函数,返回一个parser.parse_args()对象,并带有一个参数--log_level,目的是全局定义(至少这是我的意图)log_level。这里有一个默认的log_level处理(也就是说,它总是被定义)。

我会尝试模拟一个最小的例子。

import argparse
from logfile from Logfile
from logger import Logger


def argument_parser():

    parser=argparse.ArgumentParser()

    stuff

    return parser.parse_args()

def log_file_stuff():

    log_file=Logfile()
    log_file.methods() [*]

def main():

    args=argument_parser()
    # Here log_level is defined with args.log_level
    global log
    log=log(log_level)
    log_file_stuff()

main()

[*] 其中一个方法可能会调用一个Logger对象,我希望这个对象和在main()函数中定义的完全一样,我的问题是我该如何实现这一点?而不需要日志返回和参数的层层传递。

1 个回答

0

为了回答我自己的问题……我实际上实现了一个跨模块的变量字典,用来作为设置。这些设置里有一个叫 log_level 的变量。

from main import settings
from logger import Logger

log=Logger(settings['log_level'])

然后我有了一个自定义的日志记录类,里面使用了用户输入的 log_level。当然,settings 是通过 argparse 创建的,主要是用 vars(args),这和问题中的写法是一致的。

撰写回答