Вы можете использовать пользовательский обработчик HTTP, так как класс обработчика HTTP по умолчанию не позволяет отправлять приложение / json в полезной нагрузке запроса.
Вы можете прочитать о обработчиках HTTP здесь
Ниже приведен пример в Flask. Вы можете сделать то же самое в Python.
Я использовал Python3.7
в примере с Flask==1.1.1
Пример
Сохранить этот файл как test.py
import json
import requests
import logging
from logging.config import dictConfig
from flask import Flask, make_response
class HTTPSlackHandler(logging.Handler):
def emit(self, record):
log_entry = self.format(record)
json_text = json.dumps({"text": log_entry})
# add your slack webhook, create it in slack apps
url = "https://hooks.slack.com/services/<application_key>/<api_key>"
return requests.post(url, json_text, headers={"Content-type": "application/json"}).content
dictConfig({
"version": 1,
"formatters": {"default": {
"format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s",
}},
"handlers": {
"wsgi": {
"class": "logging.StreamHandler",
"stream": "ext://flask.logging.wsgi_errors_stream",
"formatter": "default"
},
"slack": {
# add <filename> instead of test
"class": "test.HTTPSlackHandler",
"formatter": "default",
"level": "ERROR"
}
},
"root": {
"level": "DEBUG",
"handlers": ["wsgi", "slack"]
}
})
app = Flask(__name__)
@app.route("/test", methods=["GET"])
def health_check():
try:
x = 1/0
except:
logging.error('This will be notified on slack')
return make_response("OK", 200)
if __name__ == "__main__":
app.run(host="0.0.0.0", port="5000")
Тестирование
curl localhost:5000/test