【问题标题】:Logging filename and line number in python [duplicate]在python中记录文件名和行号[重复]
【发布时间】:2021-08-01 17:14:25
【问题描述】:

我按照here 的描述创建了一个自定义格式化程序。

然后我尝试使用以下代码将记录器及其初始化嵌入到单例中:

import logging

class _Logger:
    _instance = None

    def __init__(self):
        self.logger = logging.getLogger("LeApp")
        self.logger.setLevel(logging.DEBUG)
        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(CustomFormatter())
        self.logger.addHandler(ch)


def Logger() -> _Logger:
    if not _Logger._instance:
        _Logger._instance = _Logger()
    return _Logger._instance


def MYLOG(iMessage: str):
    Logger().logger.info(iMessage)


def MYDBG(iMessage: str):
    Logger().logger.debug(iMessage)


def MYWAR(iMessage: str):
    Logger().logger.warning(iMessage)


def MYERR(iMessage: str):
    Logger().logger.error(iMessage)


def CRITICAL(iMessage: str):
    Logger().logger.critical(iMessage)

但是现在,日志中显示的信息不是引发警告的行号和文件名,而只是此 python 文件的文件名/行号。

[2021-08-01 10:30:32,889.889] p42815 {Logger2.py:58} WARNING - Object was None

日志库如何显示这些信息?

【问题讨论】:

  • @quamrana 是的,我就是这个意思,谢谢

标签: python python-3.x


【解决方案1】:

从 cmets 中的建议开始,这是我的解决方案:

import inspect

def getCaller() -> str:
    aFrame = sys._getframe(2)
    info = inspect.getframeinfo(aFrame)
    return os.path.basename(info.filename) + ":" + str(info.lineno)


def MYLOG(iMessage: str):
    Logger().logger.info(getCaller() + " - " + iMessage)

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 2020-04-21
    • 2021-01-29
    • 1970-01-01
    • 2013-06-09
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多