作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 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.debug
和
logger.error
登录到
logs/debugs/views.debug.log
.我尝试更改
logs/info/views.debug.log
文件到
logs/infos/views.info.log
和
logs/error/views.error.log
至
logs/error/views.error.log
但什么都没有改变。
最佳答案
嗯,我想出了一些办法。
在你的应用程序中(在这个例子中是教程中的 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/
我是一名优秀的程序员,十分优秀!