使用多个模块的 python 日志记录不输出正确的原始数据(文件名、函数名...)

问题描述 投票:0回答:1

尝试使用日志记录和多模块。

要求是有一个自定义日志类,除了其他方法之外,它还能够使用一些方法记录事件。

我宁愿不使用装饰品。

logger.py 是一个普通文件,将被许多其他文件(模块)导入。

module.py 就是这样一个单一的模块(见下面的代码)。

运行module.py时,输出为:

2023-05-12 01:17:55,682 DEBUG -= MSG =- (logger.py:debug:24)

一些非记录器打印:RPT

因为我运行的是 module.py 而不是 logger.py,所以我希望第一行是:

2023-05-12 01:17:55,682 DEBUG -= MSG =- (module.py:my_func_1:5)

模块.py

from logger import Log, get_module_logger
logger = get_module_logger(__name__)
log = Log(logger)

def my_func_1():
    log.debug("-= MSG =-")
    log.report("RPT")
my_func_1()

记录器.py

import logging

def get_module_logger(mod_name):
    logger = logging.getLogger(mod_name)
    handler = logging.StreamHandler()
    formatter = logging.Formatter(
        '%(asctime)s %(levelname)-8s %(message)s (%(filename)s:%(funcName)s:%(lineno)d)')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)
    return logger

class Log():
    def __init__(self, logger):
    self.logger = logger

    def report(self, msg):
        print(f"some none-logger printing: {msg}")

    def debug(self, msg):
        self.logger.debug(msg)
python logging multi-module
1个回答
0
投票

您将记录器包装在

Log
类中并在
self.logger.debug(msg)
中调用
logger.py
,这意味着调用
debug()
函数的行在
logger.py
中,而不是
module.py
中,因此为什么
logger.py 
被记录为文件名。

© www.soinside.com 2019 - 2024. All rights reserved.