Django 3日志记录-未使用自定义应用程序记录器

时间:2020-07-25 04:24:29

标签: django logging

我有这个应用程序结构

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应用程序并使用root记录器转到此路径时,仅记录错误。

ERROR logged in customApp.urls

为什么不使用我的customApp记录器?

1 个答案:

答案 0 :(得分:0)

我通常不用创建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())