Python / Django - 调用函数的日志名称

时间:2012-07-31 15:06:24

标签: python django logging

我有一个带有两个管理命令的django应用程序,它们都调用一个公共库。让我们称之为sync_a和sync_b。我希望日志条目记录调用函数(或模块),以便我知道日志消息是来自sync_a还是sync_b

# sync_a.py
from utils.some_module import some_function
import logging
logger = logging.getLogger(__name__)

class Command(BaseCommand):
    some_function('a')

# sync_b.py
from utils.some_module import some_function
import logging
logger = logging.getLogger(__name__)

class Command(BaseCommand):
    some_function('a')

# some_module.py
def some_function(param):
    logger.info("running")

settings.py中的日志记录设置为:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'semi_verbose': {
            'format': '[%(levelname)s] %(module)s %(name)s %(funcName)s(): %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'semi_verbose'
        }
    },
    'loggers': {
        'app': {
            'handlers': ['console'],
            'level': 'debug',
            'propagate': True
        }
    }
}

我看到的日志消息格式为:

[INFO] utils.some_module some_function(): running

我希望他们包含sync_a或sync_b。

我不确定我尝试做的是不寻常的,还是我的配置不正确。我知道我可以自定义log.info()行来使用参数或使用inspect,但我正在尝试找到一个无需执行此操作的解决方案,因为我有几个管理命令和库,我会喜欢它可以解决。

1 个答案:

答案 0 :(得分:0)

我查看了Python日志记录documentation,看起来LogRecord看起来不像您要查找的信息。

如果我打算这样做,我想我会编写一个可以查找的自定义Formatter并将调用堆栈信息添加到日志记录调用中。 inspect模块的stack功能可能是最好的方法。