環境
- Windows 10
- Python 3.10.1
- VSCode
動作イメージ
添付のような通知をプログラムから送信することが可能
本題
事前準備
slackにwebhookのインテグレーションを追加しておく
モジュールのインストール
slack_log_handlerをインストール
https://pypi.org/project/slack_log_handler/
pip install slack_log_handler
実装
open関数で対象のfileが見つからず、FileNotFoundErrorが送出された際に、slackへ通知します
shared\Application\open_text_service.py
import sys
from shared.Domain.xtext import XText
from shared.x_logger import XLogger
class OpenTextService:
def execute(self, x_text: XText, mode, encoding):
try:
f = open(file=x_text.get_path(), mode=mode, encoding=encoding)
return f.read()
except FileNotFoundError:
XLogger.exceptionToSlack("対象のファイルが存在しないか、破損しています")
sys.exit()
finally:
# 必ず閉じる。閉じていないファイルに再びアクセスしたら、ファイルが開きっぱなしなので開けない等になる
# with文を使用すれば、自動で閉じてくれる
if "f" in locals():
f.close()
shared\x_logger.py
- 事前に環境変数にslackのwebhookurlを追加しておく
windowsなら、スタートメニューのシステム環境変数から追加可能 - 標準ライブラリloggerでログを出力する際の記述とほぼ同様で、大きく異なるのは、SlackHandlerを使用してhandlerオブジェクトを生成する箇所くらい
- あとは呼び出し元から引数で受け取ったメッセージをslackに送信する
from logging import DEBUG, getLogger
import os
from slack_log_handler import SlackLogHandler
class XLogger:
@staticmethod
def exceptionToSlack(msg: str) -> None:
WEBHOOK_URL = os.environ.get("WEBHOOK_URL_JOBCAN")
handler = SlackLogHandler(WEBHOOK_URL)
handler.setLevel(DEBUG)
logger = getLogger(__name__)
logger.setLevel(DEBUG)
logger.addHandler(handler)
logger.exception(msg)
まとめ
いかがでしたでしょうか。本記事では、Pythonでslack_log_handlerを使用してログをslackに通知する際のプログラム例や設定方法について紹介しています。ぜひ参考にしてみてください。