gpt4 book ai didi

django - 如何在自己的文件路径中隔离 INFO 和 ERROR 日志

转载 作者:行者123 更新时间:2023-12-04 07:41:06 25 4
gpt4 key购买 nike

我有这个 LOGGING我的 Django 应用程序的设置。我期待的是 views logs当我有三个不同的 loggers 时,我会进入他们自己单独的文件夹在我的 views文件。
我的登录器 settings文件:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'views_error_file': {
'class': 'logging.FileHandler',
'filename': 'logs/errors/views.debug.log',
},
'views_info_file': {
'class': 'logging.FileHandler',
'filename': 'logs/infos/views.debug.log',
},
'views_debug_file': {
'class': 'logging.FileHandler',
'filename': 'logs/debugs/views.debug.log',
}
},
'loggers': {
'py_folder.views': {
'handlers': ['views_error_file'],
'level': 'ERROR',
},

'py_folder.views': {
'handlers': ['views_info_file'],
'level': 'INFO',
},

'py_folder.views': {
'handlers': ['views_debug_file'],
'level': 'DEBUG',
}
}
}
views.py文件:
import logging
# Get an instance of a logger
logger = logging.getLogger(__name__)

def sample_function(request):
params_choices = ['param_1', 'param_2']

sample_param = request.POST.get('sample_param')
# logger.debug should be logged at logs/debugs/views.debug.log
logger.debug(sample_param)
if sample_param in params_choices:
if sample_param == 'param_1':
# logger.info should be logged at logs/infos/views.debug.log
logger.info("param_1 okay")
return redirect("/param_1-req")
else:
# logger.error should be logged at logs/error/views.debug.log
logger.error("param_2 okay")
return redirect("/param_2-req")
else:
logger.error("param does not exist")
return redirect("/param-invalid")
但它只进入日志/调试/ View .debug.log。 logs/debugs/views.debug.log file :
param_3
param does not exist
如您所见, logger.debuglogger.error登录到 logs/debugs/views.debug.log .我尝试更改 logs/info/views.debug.log文件到 logs/infos/views.info.loglogs/error/views.error.loglogs/error/views.error.log但什么都没有改变。
我不知道为什么会出现这种行为。我是 Django 的新手。请帮忙。

最佳答案

嗯,我想出了一些办法。
在你的应用程序中(在这个例子中是教程中的 polls 应用程序),创建一个目录 logs , 里面有一个名为 handlers.py 的文件,有了这个内容:

from logging import FileHandler, INFO, ERROR, DEBUG

class AppFileHandler(FileHandler):
def __init__(self, filename, loglevel, mode, encoding, delay):
super().__init__(filename, mode, encoding, delay)
self.loglevel = loglevel

def emit(self, record):
if not record.levelno == self.loglevel:
return
super().emit(record)

class AppDebugFileHandler(AppFileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False):
super().__init__(filename, DEBUG, mode, encoding, delay)

class AppErrorFileHandler(AppFileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False):
super().__init__(filename, ERROR, mode, encoding, delay)

class AppInfoFileHandler(AppFileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False):
super().__init__(filename, INFO, mode, encoding, delay)
然后改 LOGGING像这样:
import os # you can move this import to beginning of settings.py

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'views_info_file': {
'class': 'polls.logs.handlers.AppInfoFileHandler',
'filename': os.path.join(BASE_DIR, 'views.info.log'),
},
'views_error_file': {
'class': 'polls.logs.handlers.AppErrorFileHandler',
'filename': os.path.join(BASE_DIR, 'views.error.log'),
},
'views_debug_file': {
'class': 'polls.logs.handlers.AppDebugFileHandler',
'filename': os.path.join(BASE_DIR, 'views.debug.log'),
},
},
'loggers': {
'polls.views': {
'handlers': ['views_info_file', 'views_error_file', 'views_debug_file'],
'level': 'DEBUG'
},
}
}
这将在您项目的根目录上创建 3 个日志文件(不是应用程序,您可以自定义 filename 目录)。
这有效,但也许这不是最好的方法,可能是在这里重新发明轮子。还有 level: 'DEBUG'设置不再指示错误级别日志记录,应在设置注释中强调这一点。

关于django - 如何在自己的文件路径中隔离 INFO 和 ERROR 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67460075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com