Django 管理命令不显示我的库的日志
Django management command does not show logs of my library
这个问题是这个 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')
为什么当我 运行 命令时记录器不显示到标准输出?打印出来没问题,但我需要一个记录器
PS:
我试过了,但没有任何改变
from parser import logger
root_logger = logger
root_logger.setLevel(logging.INFO)
MyParser(data)
我 90% 确定这将是一个配置问题,而不是您使用记录器不正确。
在我看来,Django 日志记录文档并没有让生活变得更轻松。
首先,将其添加到您的设置 .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 说,"the default only displays log records when DEBUG=True"。
我将基于您没有正确配置您的日志记录配置这一事实,这是最有可能的。默认情况下,除了 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)
我遇到了同样的问题,因为我忘记了我是这样定义我的 cron 作业的:
0 * * * * cd <path> && <path>/venvs/env/bin/python <path>/manage.py schedule_tasks >> cron.log 2>&1
因此我将日志语句定向到文件 "cron.log"!
这个问题是这个 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')
为什么当我 运行 命令时记录器不显示到标准输出?打印出来没问题,但我需要一个记录器
PS:
我试过了,但没有任何改变
from parser import logger
root_logger = logger
root_logger.setLevel(logging.INFO)
MyParser(data)
我 90% 确定这将是一个配置问题,而不是您使用记录器不正确。
在我看来,Django 日志记录文档并没有让生活变得更轻松。
首先,将其添加到您的设置 .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 说,"the default only displays log records when DEBUG=True"。
我将基于您没有正确配置您的日志记录配置这一事实,这是最有可能的。默认情况下,除了 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)
我遇到了同样的问题,因为我忘记了我是这样定义我的 cron 作业的:
0 * * * * cd <path> && <path>/venvs/env/bin/python <path>/manage.py schedule_tasks >> cron.log 2>&1
因此我将日志语句定向到文件 "cron.log"!