【问题标题】:django logging to a file does not workdjango 记录到文件不起作用
【发布时间】:2017-06-21 12:40:29
【问题描述】:

django settings.py 有:

LOG_LEVEL = 'DEBUG'
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'logfile': {
            'level': LOG_LEVEL,
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/tmp/django.log',
            'maxBytes': 1000000,
            'backupCount': 10,
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['logfile'],
            'level': LOG_LEVEL,
            'propagate': True,
        },
    }
}

views.py 有:

import logging
def some_view(request):
    logging.error('something')

我还直接从official django 1.8 documentation 中尝试了以下方法:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

我没有在日志中收到此消息。但是,如果出现异常和异常,则会显示在 django 日志文件中。 此外,如果我在设置中设置 DEBUG=False 并使用打印语句而不是记录器,则消息会显示在控制台中。 在文档的底部,它说当 DEBUG=True 时,所有日志级别都应该传播,但它们不是。 任何想法如何使记录器消息至少在 DEBUG=True 的情况下出现在日志文件中?

【问题讨论】:

  • 可能是因为打错了def some_view(erquest):,你的意思肯定是request
  • 不,只是发帖时打错了。
  • 你可以试试this answer看看它是否适合你。

标签: django


【解决方案1】:
import logging
def some_view(request):
    logging.error('something')

问题是当您在视图上调用记录器时。 您应该调用您在设置中创建的记录器。 像这样:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'logfile': {
            'level': LOG_LEVEL,
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/tmp/django.log',
            'maxBytes': 1000000,
            'backupCount': 10,
        },
    },
    'loggers': {
        'django': {
            'handlers': ['logfile'],
            'level': LOG_LEVEL,
            'propagate': True,
        },
    }
}

import logging
logger = logging.getLogger("django")

def some_view(request):

    logger.error('something')

【讨论】:

    【解决方案2】:

    Django 日志记录

    请按照以下步骤进行。 在 django 项目根 settings.py 文件中添加配置。

    LOGGING = {
        'handlers': {
            'default': {
                #'class': 'logging.handlers.TimedRotatingFileHandler',
                'class': 'cloghandler.ConcurrentRotatingFileHandler',
                'formatter': 'standard',
                #'level': 'DEBUG',
                #'filters': [],
                #'class': 'django.utils.log.AdminEmailHandler'
                #'filename': 'project/project/error.log',
                'filename' : 'None',
                'maxBytes': 1024*1024*10,
                'backupCount': 1000,
                #'when': 'midnight',
                #'interval': 1,
                #'utc': True,
            },
        },
        'loggers': {
            '': {
                'handlers': ['default'],
                'level': 'DEBUG',
                'propagate': True,
            },
        },
    }
    

    在 Views.py 文件中

    import logging
    log = logging.getLogger(__name__)
    def test_function(request):
        log.debug("Im Here to help you", exc_info=True)
    

    【讨论】:

    • 这失败了。记录器字典中的几个问题。
    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多