【发布时间】:2013-07-16 14:45:28
【问题描述】:
我有一些 Python 代码需要添加日志记录。
我一直更喜欢漂亮的大 C 宏外观语句,如“DEBUG()”、“ERROR()”等来进行日志记录。我觉得当跟踪点与实际代码在视觉上可以区分时,它使代码更易于阅读(没有对象)。
我还希望能够在每个模块级别设置日志记录级别。
我怎样才能制作一个名为“log”的模块来执行此操作(同时使用 Python 标准库日志记录模块)?
例如:
文件:main.py
# This imports LOG_MODULE_NAME, DEBUG, WARN, etc
from log import *
import my_module
LOG_MODULE_NAME("main")
log.set_level("main", log.LVL_DEBUG)
log.set_level("my_module", log.LVL_WARN)
if __name__ == "__main__":
foo = my_module.myFunc(2)
DEBUG("Exiting main.py")
文件:my_module.py
from log import *
LOG_MODULE_NAME("my_module")
def myFunc(x):
DEBUG("Entering function")
if x != 1:
WARN("I thought it would be 1")
DEBUG("Exiting function")
return x+1
我希望输出看起来像:
[WARN:my_module - my_module.py:9] I thought it would be 1
[DEBUG:main - main.py:11] Exiting main.py
【问题讨论】:
-
@dnozay 不是。 OP 正在尝试创建环绕
Logger的函数。 -
如果您阅读了我链接的问题,我们不需要关于在涉及不同模块时如何设置日志记录的第 n 个问题。
-
请编辑您的问题。就目前而言,您当前的问题是如何编写整个模块。你试过写这个模块吗?你卡在哪些部分?使用 Python 日志记录模块?获取从中调用函数的模块的名称?按照您指定的方式设置格式化程序?
-
我一直坚持让函数(DEBUG、WARN 等)的行为取决于调用它的文件/模块。重新考虑这一点,我想我可以用更直接的方式提出这个问题(这与日志记录无关)。我不能只在 log.py 中引用“_name_”,因为那将引用日志模块。另外,我希望能够将多个文件“注册”为一个“模块”。无论如何,在阅读 2rs2ts 的答案后,我认为仅使用全局名称是正确的方法。不过,我不确定“from x import *”的影响。