Pythonでslack_log_handlerを使用してログをslackに通知する

環境

  • 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)

Python学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2022/02/05 17:20時点)
タイトルとURLをコピーしました