Django管理命令不显示我的库的日志

2024-05-20 10:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题是这个4年前没有答案的问题的简单版本Django management command doesn't show logging output from python library

我有个命令:

class Command(BaseCommand):
  def handle(self, *args, **options):
  ...
  MyParser(data)

在MyParser中:

logger = logging.getLogger(__name__)

Class MyParser:
   def __init__(self, data):
       logger.info('hello')

为什么在我运行命令时日志程序不显示给stdout?有打印可以,但我需要一个记录器

附言:

我试过了,但没什么改变

from parser import logger
root_logger = logger
root_logger.setLevel(logging.INFO)
MyParser(data)

Tags: django答案from命令self版本myparserdata
1条回答
网友
1楼 · 发布于 2024-05-20 10:59:33

我90%肯定这将是一个配置问题,而不是你使用记录器不正确。你知道吗

在我看来,Django日志文件并没有让生活变得更轻松。你知道吗

首先,将其添加到settings.py文件中,替换任何其他LOGGING =语句:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
        '': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
}

请注意“”记录器,它用于捕获所有日志消息(而默认的只捕获来自django本身的消息)。你知道吗

如果这一点不起作用,也可以尝试在设置中设置DEBUG=True(显然不是在生产环境中)。对于为什么需要这样做,docs会说,“默认值仅在DEBUG=True时显示日志记录”。你知道吗

网友
2楼 · 发布于 2024-05-20 10:59:33

我将基于这样一个事实,你没有正确配置你的日志配置,这是最有可能的。默认情况下,除了django.requests(或者类似的内容)之外,没有任何日志记录。你知道吗

如果要显示日志消息,则需要捕获消息并将其转发给相应的处理程序。你知道吗

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'console': {
            'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'console',
        },
    },
    'loggers': {
        '': {
            'level': 'INFO',
            'handlers': ['console'],
        },
    },
}

(我无耻地在django日志中提取并剥离了这个代码块from this blog post

相关问题 更多 >