Masayan tech blog.

  1. ブログ記事一覧>
  2. Pythonでslack_log_handlerを使用してログをslackに通知する

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

公開日

環境

  • 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に通知する際のプログラム例や設定方法について紹介しています。ぜひ参考にしてみてください。