python - 查明 Django 错误报告的日志消息
问题描述
我一直在尝试区分来自生产服务器、开发服务器或本地服务器的日志记录。我有 python-telegram-handler 2.2,它通过机器人将日志发送到 Telegram 群聊。
所有这些服务器中的代码都是相同的,因为 localhost 代码被合并到开发分支(负责开发服务器),当开发分支准备好时,它被合并到主分支,主分支负责生产服务器。有没有办法调整设置,以便电报日志告诉我们哪个服务器有错误?非常感谢!
下面是设置目录中 base.py 的 LOGGING 部分。
设置/base.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
},
},
'formatters': {
'simple_trace': {
'format': '%(asctime)s,%(msecs)d %(levelname)-8s %(message)s',
}
},
'handlers': {
'telegram': {
'class': 'telegram_handler.TelegramHandler',
'token': '1489551033:AAHbIvspcVR5zcslrbrJ9qNK2yZ1at0yIMA',
'chat_id': '-429967971',
'formatter': 'simple_trace'
}
},
'loggers': {
'': {
'handlers': ['telegram'],
'level': 'INFO',
'propagate': True,
},
},
}
而且我还有一个中间件,只要响应为 400 或 500,它就会发送请求正文的日志。
api/custommiddleware.py
import json
import logging
import base64
import http
from datetime import datetime
class ErrorCatchMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
jsonRequest = json.loads(request.body.decode('utf-8'))
except Exception as e:
jsonRequest = {}
response = self.get_response(request)
if (response.status_code == 400 or response.status_code == 500):
logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s %(message)s',
datefmt = '%Y-%m-%d:%H:%M:%S',
level = logging.INFO
)
logger = logging.getLogger(__name__)
logger.info({'request': jsonRequest})
response_content = response.content
logger.warning(response_content.decode('utf-8'))
print(jsonRequest)
print(response_content.decode('utf-8'))
return response
else:
return response
如您所见,该文件没有说明此错误是发生在生产服务器、开发服务器还是本地主机中。我必须找出一种方法来区分发生此类错误的服务器。
解决方案
您可以在相应的设置模块中覆盖格式化程序,如下所示:
设置/生产.py
LOGGING['formatters']['simple_trace']['format'] = 'Production: %s'%LOGGING['formatters']['simple_trace']['format']
推荐阅读
- database - 有没有人有管理 Cassandra 部署的好方法
- azure - 无法认证,需要:mac的承载授权
- angular - 使用 .find 方法在角度中使用 jest 对数组进行单元测试
- flutter - Flutter 自动打印任何 http 请求 - 抽象 HTTP 类
- python - 在 scipy 的牛顿函数中输入一个数组作为初始猜测
- arrays - Vue v-for:使用事件处理程序(@change)从数组动态填充 HTML 到组件模板中
- django - 为什么我的 ViewSet 在使用 get_object_or_404 使用 for loop ang 后继续循环?
- python - 将类或函数导入“unittest”测试模块的最佳实践是什么
- android - 像whatsapp一样开发实时应用程序的问题
- python-3.x - 如何为文件配置的 python 记录器设置新文件名?