gpt4 book ai didi

python - Python 中的每个文件/模块记录器

转载 作者:太空狗 更新时间:2023-10-30 00:28:13 24 4
gpt4 key购买 nike

我有一些 Python 代码需要添加日志记录。

我一直喜欢使用漂亮的大型 C 宏语句来记录日志,例如“DEBUG()”、“ERROR()”等。我觉得当跟踪点在视觉上与实际代码不同时,代码更易于阅读(无对象)。

我还希望能够在每个模块级别设置日志记录级别。

我如何制作一个名为“log”的模块来执行此操作(同时使用 Python std 库日志记录模块)?

例如:

文件: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

最佳答案

这些答案似乎跳过了一个非常简单的想法,即函数是一流的对象,它允许:

def a_function(n):
pass

MY_HAPPY_NAME = a_function
MY_HAPPY_NAME(15) # which is equivalent to a_function(15)

Except 我建议您不要这样做。 PEP8 coding conventions被广泛使用是因为生命太短暂,我不得不以你喜欢的 COBOLy 方式阅读标识符。

其他一些答案也使用 global 语句,这在 Python 中几乎总是不需要的。如果您正在制作模块级记录器实例,那么

import logging

log = logging.getLogger(__name__)

def some_method():
...
log.debug(...)

是使用模块级变量 log 的一种完美可行的简洁方法。你甚至可以做

log = logging.getLogger(__name__)
DEBUG = log.debug

def some_method():
...
DEBUG(...)

但我保留称其为丑陋的权利。

关于python - Python 中的每个文件/模块记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17710102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com