【问题标题】:Django 3 Logging - custom app logger isn't usedDjango 3 Logging - 不使用自定义应用程序记录器
【发布时间】:2020-07-25 04:24:29
【问题描述】:

我有这个应用程序结构

app/
  customApp/
    urls.py
  app/
    settings.py
  manage.py

在 settings.py 这是我的日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'ERROR',
    },
    'customApp': {
        'handlers': ['console'],
        'level': 'DEBUG',
        'propagate': True,
    }
}

我正在尝试像这样在 customApp.urls 中触发 customApp 记录器:

from django.urls import path
from django.http import HttpResponse
from logging import getLogger

logger = getLogger(__name__)

def make_response(request):
    # if handler is set to console, print result is ALWAYS logged

    # this is the logging level hierarchy debug < info < warning < error
    logger.debug(f'DEBUG logged in {__name__}')
    logger.info(f'INFO logged in {__name__}')
    logger.warning(f'WARNING logged in {__name__}')
    logger.error(f'ERROR logged in {__name__}')
    return HttpResponse('<h1>Ok!</h1>')


urlpatterns = [
    path('', make_response)
]

当运行 django 应用程序并转到此路径时,使用的是根记录器,仅记录错误。

ERROR logged in customApp.urls

为什么我的 customApp 记录器没有被使用?

【问题讨论】:

    标签: django logging


    【解决方案1】:

    我通常不会写setting.py,而是创建一个新文件utils.py

    utils.py

    import logging
    from os import path
    
    def setLogger():
        logger = logging.getLogger('myservice')
        BASE_DIR = path.dirname(path.dirname(__file__))
        LOG_DIR = path.join(BASE_DIR, 'myservice/logs/')
        hdlr = logging.FileHandler(LOG_DIR + 'myservice.log')
        formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
        hdlr.setFormatter(formatter)
        logger.addHandler(hdlr)
        logger.setLevel(logging.DEBUG)
        return logger
    

    然后在视图中导入它

    views.py

    from myservice.utils import setLogger
    from traceback import format_exc
    
    logger = setLogger()
    
    def fn_login(req):
        try:
            pass
        except Exception as identifier:
            logger.error(format_exc())
            logger.info(format_exc())
            logger.warning(format_exc())
    

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2011-09-08
      相关资源
      最近更新 更多