Python 将django.request记录到文件而不是控制台
我正在尝试配置djangoPython 将django.request记录到文件而不是控制台,python,django,logging,Python,Django,Logging,我正在尝试配置djangosettings.py以正确使用python日志功能,但我遇到了一个相当奇怪的问题: 即使在阅读了之后,我也无法找到如何将控制台打印的调试请求行从Django重定向到我指定的文件;下面是我的日志配置的一部分 LOGGING = { 'version': 1, 'formatters': { 'simple': { 'format': '%(levelname)s %(message)s' },
settings.py
以正确使用python日志功能,但我遇到了一个相当奇怪的问题:
即使在阅读了之后,我也无法找到如何将控制台打印的调试请求行从Django重定向到我指定的文件;下面是我的日志配置的一部分
LOGGING = {
'version': 1,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s'
},
}
'handlers': {
'file_http': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': r'C:\mysystem-http.log',
'formatter': 'verbose'
}
},
'loggers': {
'django.request': {
'handlers': ['file_http'],
'level': 'DEBUG',
'propagate': False
}
}
}
我一直看到以下格式的控制台打印行:
[19/Dec/2014 11:48:03]“POST/api/v1/HTTP/1.1”200 10
如何使用日志记录工具将这些文件重定向到文件
提前感谢这些输出由您的HTTP服务器处理(如果在开发模式下运行,则来自标准库的WSGIServer)
settings.py
的配置与此无关。manage.py runserver
未使用日志系统记录类似于[19/Dec/2014 11:48:03]“POST/api/v1/HTTP/1.1”200 10的消息。与此相反,runserver使用sys.stderr(其他消息使用sys.stdout)。如果确实需要将其重定向到文件,则可以覆盖sys.stderr settings.py。示例-将sys.stderr记录到文件和控制台:
import sys
class Logger(object):
def __init__(self):
self.console = sys.stderr
self.file = open("runserver.log", "a", 0)
def write(self, msg):
self.console.write(msg)
self.file.write(msg)
sys.stderr = Logger()
在write方法中,您还可以使用日志记录系统通过日志记录设置来处理此问题
更新:
在Django 1.10中,runserver输出通过日志记录:
的答案是正确的
在Django 1.10之前,manage.py runserver
运行Django自己的实现,该实现登录到sys.stderr
将以下代码添加到settings.py
将对runserver
使用的WSGIRequestHandler进行猴子补丁,以便通过名为django.server
的日志模块记录所有请求,以便大致模拟django 1.10+的行为
###############################################################################
#1.10版之前DJANGO RUNSERVER日志记录的SUPER-JANK修补程序
###############################################################################
#
#将此添加到settings.py
#
导入日志记录
从django.core.servers.basehttp导入WSGIRequestHandler
logger=logging.getLogger('django.server')
def log_消息(自身、格式、*args):
#不要麻烦记录管理员映像或favicon的请求。
如果self.path.startswith(self.admin\u static\u前缀)或self.path='/favicon.ico':
返回
msg=格式%args
如果['1','4','5']中的args[1][0]:
logger.warn(msg)
其他:
logger.info(msg)
WSGIRequestHandler.log\u message=log\u message
它取代了负责实际写入stderr
的方法
添加此修补程序后,您可以通过settings.py
中的logging
正常配置日志记录。那么,有没有一种方法可以使用日志功能重定向该库的输出?这取决于您的堆栈。这比bash重定向好多少?很简单,它并不好(可能原因之一是您可以同时登录到文件+控制台并添加过滤器/格式化程序等)。仅供记录:如果您有多进程设置,登录到文件可能不是一个好主意,cf