首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的日志文件名和行号

python中的日志文件名和行号
EN

Stack Overflow用户
提问于 2021-08-01 08:46:04
回答 1查看 52关注 0票数 0

我创建了一个自定义格式化程序,如here所述。

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

代码语言:javascript
复制
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文件的文件名/行号。

代码语言:javascript
复制
[2021-08-01 10:30:32,889.889] p42815 {Logger2.py:58} WARNING - Object was None

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

EN

回答 1

Stack Overflow用户

发布于 2021-08-01 09:14:25

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68608810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档