【问题标题】:logger.info not working in Django logginglogger.info 在 Django 日志记录中不起作用
【发布时间】:2020-10-28 04:00:01
【问题描述】:

以下是我在 django settings.py 文件中使用的日志记录 sn-p。所有的 GET、POST 请求都被写入日志,但是当我写 logger.info("print something") 时,它并没有在控制台和日志文件中打印/捕获

请建议一种解决方法来捕获 logger.info() 日志

views.py

import logging

logger = logging.getLogger(__name__)

def custom_data_generator(request):
    logger.info("print somethig") # NOT GETTING CAPTURED IN LOG FILE
    return somethig

settings.pyDEBUG = TrueDEBUG_MODE = False 在 settings.py 文件中)

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'simple': {
        'format': '[%(asctime)s] %(levelname)s|%(name)s|%(message)s',
        'datefmt': '%Y-%m-%d %H:%M:%S',
    },
},
'handlers': {
    'applogfile': {
        'level': 'DEBUG',
        'class': 'logging.handlers.RotatingFileHandler',
        'filename': '/home/mahesh/Documents/refactor/unityapp/unity/media/myproject.log',
        'backupCount': 10,
        'formatter': 'simple',
    },
    'console': {
        'level': 'DEBUG',
        'class': 'logging.StreamHandler',
        'formatter': 'simple'
    }
},
'loggers': {
    'django': {
        'handlers': ['applogfile', 'console'],
        'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
    }
}
}

生成的日志数据如下

[2020-07-07 11:43:25] ERROR|django.server|"GET /a11y/project-dashboard/?

refnum=ACGLOBAL&env_id=4 HTTP/1.1" 500 92016
[2020-07-07 12:05:21] INFO|django.server|"GET /admin/ HTTP/1.1" 200 59501
[2020-07-07 12:05:21] INFO|django.server|"GET /admin/ HTTP/1.1" 200 59501
[2020-07-07 12:05:21] INFO|django.server|"GET /static/admin/fonts/Roboto-Light-webfont.woff HTTP/1.1" 200 85692
[2020-07-07 12:05:21] INFO|django.server|"GET /static/admin/fonts/Roboto-Bold-webfont.woff HTTP/1.1" 200 86184
[2020-07-07 12:05:21] INFO|django.server|"GET /static/admin/fonts/Roboto-Regular-webfont.woff HTTP/1.1" 200 85876
[2020-07-07 12:05:26] INFO|django.server|"GET /admin/accessibility/axe_json/ HTTP/1.1" 200 1886434
[2020-07-07 12:05:27] INFO|django.server|"GET /admin/jsi18n/ HTTP/1.1" 200 3223
[2020-07-07 12:05:27] INFO|django.server|"GET /static/admin/js/vendor/jquery/jquery.js HTTP/1.1" 200 280364
[2020-07-07 12:05:27] INFO|django.server|"GET /static/admin/js/vendor/xregexp/xregexp.js HTTP/1.1" 200 128820
[2020-07-07 12:05:34] INFO|django.server|"GET /admin/accessibility/axe_json/?page_id=https%3A%2F%2Fjobs.chegg.com%2Fapplythankyou HTTP/1.1" 200 1868950
[2020-07-07 12:05:35] INFO|django.server|"GET /admin/jsi18n/ HTTP/1.1" 200 3223

【问题讨论】:

    标签: python logging django-logging


    【解决方案1】:

    这可能是因为您的视图模块没有设置日志记录级别,因此它将继承根记录器的默认级别WARNING。如果您添加级别为INFOroot 条目,类似于documented examples,您应该会看到来自其他模块的消息。或者,您可以在 loggers 键下为您的特定模块层次结构指定记录器名称,无论是什么。 (您的示例仅覆盖 django 层次结构中模块的 WARNING 级别,即 Django 本身中的代码。)

    【讨论】:

    • 完成上述步骤后,每条日志都会在我的日志文件中被捕获两次。你能告诉我我在哪里做错了吗?这是日志记录 sn-p slack-files.com/T04MYU6C6-F0176Q8PJEQ-30938e3c8b
    • @Mahesh 这是因为您在两个地方添加了一个处理程序。您可以从 django 记录器中删除 applogfile 处理程序。在根记录器中添加的处理程序也被django 记录器自动使用。
    【解决方案2】:

    在您提供的示例中,您只是为“django”记录器设置日志级别。该记录器控制django.requestdjango.serverdjango.template等的日志级别。如果您希望为自己的应用设置日志级别,则需要为该特定应用的记录器设置日志级别,或者使用如下配置为所有应用设置它

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console_handler': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            # More info on '' (unnamed) loggers at the end of this comment
            '': {
                'level': 'INFO',
                'handlers': ['console_handler'],
            },
        },
    
    }
    

    ''(未命名)记录器将处理来自所有记录器的记录。更多信息在这里:https://docs.djangoproject.com/en/dev/howto/logging/#configure-a-logger-mapping

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 2020-05-27
      • 2011-07-12
      • 2021-11-19
      • 2012-06-13
      • 2018-08-24
      • 2011-12-27
      • 2013-04-27
      相关资源
      最近更新 更多