環境
- Windows 10
- Python 3.10.1
- VSCode
使用するソースコード
以下の公開リポジトリに置いています
GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.
動作イメージ
添付のような通知をプログラムから送信することが可能
本題
pythonのloggerについての基本的な設定方法についてはこちらの記事を参照ください

Pythonでいい感じのロギングするためのTips
本記事では、Pythonでいい感じのロギングするためのTipsについて紹介しています。具体的には、基本的なログの出力方法とログのフォーマットの方法について説明しています
事前準備
slackにwebhookのインテグレーションを追加しておく
モジュールのインストール
slack_log_handlerをインストール

slack_log_handler
Python Slack log handler using webhook
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)