我有这个应用程序结构
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记录器?
答案 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())