- 是否有方法记录消息,就好像它们来自当前函数的调用者?*
我有一个非常简单的全局日志记录工具,它通过__main__
初始化为
logformat = '%(asctime)s %(levelname)s %(module)s:%(funcName)s:%(lineno)d - %(message)s'
logging.basicConfig(format=logformat, level=loglevel)
然后,所有函数通过
# Goes directly to the global logger
logging.warning('this might not work')
一些实用程序函数发出日志,但是%(module)s:%(funcName)s:%(lineno)d
解析为helpers:my_helper_fn:42
是没有帮助的,而触发日志的my_helper_fn
的调用者是有趣的部分。
有没有办法在my_helper_fn
中记录消息,以便funcName
和朋友自动解析为my_helper_fn
的调用者?理想情况下,我会用@logAsCaller
之类的东西来修饰my_helper_fn
...
有一个logger.findCaller
似乎是有目的地为此而设计的,我不能从文档中推断出它应该如何使用。
1条答案
按热度按时间hgb9j2n61#
logger.findCaller
似乎是专门为此设计的,但我无法从文档中推断出它应该如何使用。*差不多。这确实是记录器查找它应该在其消息中使用的调用方的方式,但用户代码无法访问此方法。
但doc中对于
logger.debug
描述了stacklevel
关键字唯一的参数(强调矿):...第三个可选关键字参数为
stacklevel
,默认值为1。如果大于1,则在计算为日志事件创建的LogRecord中设置的行号和函数名时,将跳过相应数量的堆栈帧。这可用于日志助手,以便记录的函数名、文件名和行号不是助手函数/方法的信息。而是它的调用者。所有其他日志记录方法的文档都说它们支持与debug相同的参数。
因此,您只需用途: