bitbirddev/microsoft-teams-monolog-handler

使用Incoming Webhook发送Microsoft Teams通知的Monolog处理器

1.0 2023-12-06 14:33 UTC

This package is auto-updated.

Last update: 2024-09-30 01:41:25 UTC


README

Package Version

一个PHP包,定义了自定义的Monolog处理器,用于使用Incoming Webhook发送Microsoft Teams通知。该包旨在提供一个使用Microsoft Teams "MessageCard"通知和Monolog日志库的全局消息和日志系统。

特性

  • 与Microsoft Teams通道的Monolog集成
  • 应用程序错误通知
  • 简单消息

安装

$ composer require bitbirddev/microsoft-teams-monolog-handler

请考虑运行composer suggest命令来安装与您使用的框架(例如Symfony)相关的必需和缺失依赖项。

$ composer suggest
bitbirddev/microsoft-teams-monolog-handler suggests:
 - symfony/monolog-bundle: The MonologBundle provides integration of the Monolog library into the Symfony framework.

Microsoft Teams Webhook设置

按照以下步骤设置新的Webhook

  • 在Microsoft Teams中,选择通道名称旁边的更多选项(⋯),然后选择'连接器'
  • 在连接器列表中找到'Incoming Webhook'选项,并选择'添加'
  • 提供新Webhook所需的信息
  • 复制Webhook URL - 该信息将用于使用MICROSOFT_TEAMS_WEBHOOK_URL配置包

Symfony配置

将以下代码放置在.env文件中

###> bitbirddev/microsoft-teams-monolog-handler ###
MICROSOFT_TEAMS_WEBHOOK_URL=webhook_url (without https://)
###< bitbirddev/microsoft-teams-monolog-handler ###

使用以下代码将MicrosoftTeamsMonologHandler.php注册为新服务

// config\services.yaml

services:
    ...

    # MICROSOFT TEAMS MONOLOG HANDLER
+    ms_teams_monolog_handler:
+        class: bitbirddev\MicrosoftTeamsNotifier\Handler\MicrosoftTeamsHandler
+        arguments:
+            $webhookDsn: '%https://env(MICROSOFT_TEAMS_WEBHOOK_URL)%'
+            $level: 'error'
+            $title: 'Message title'
+            $subject: 'Message subject'
+            $emoji:  '&#x1F6A8'
+            $color: '#fd0404'
+            $format: '[%%datetime%%] %%channel%%.%%level_name%%: %%message%%'

$webhookDsn
Microsoft Teams webhook URL

$level
处理器被触发并记录到通道中的消息的最小级别(Monolog/Logger类:'error' = 400)

$title (可为空)
Microsoft Teams消息的标题

$subject (可为空)
Microsoft Teams消息的主题

$emoji (可为空)
Microsoft Teams消息的emoji(显示在消息标题旁边)。值需要反映以下模式:‘&#x<EMOJI_HEX_CODE>’

$color (可为空)
消息卡颜色主题的十六进制颜色值

$format (可为空)
每个处理器都使用格式化器在记录之前格式化记录。可以将此属性设置为覆盖默认日志消息(可用选项:%datetime% | %extra.token% | %channel% | %level_name% | %message%)。

修改您的Monolog设置,使其指向新的处理器

// config\packages\dev\monolog.yaml
// config\packages\prod\monolog.yaml

monolog:
    handlers:
        ...

        # MICROSOFT TEAMS HANDLER
+        teams:
+            type: service
+            id: ms_teams_monolog_handler

类型
处理器类型(在我们的情况下,这引用了自定义通知服务)

id
通知服务类 \bitbirddev\MicrosoftTeamsNotifier\LogMonolog

Laravel配置

将以下代码放置在.env文件中

###> bitbirddev/microsoft-teams-monolog-handler ###
MICROSOFT_TEAMS_WEBHOOK_URL=webhook_url (without https://)
###< bitbirddev/microsoft-teams-monolog-handler ###

修改您的Monolog日志设置,使其指向新的处理器

注意:定义所有参数是强制性的 - 请使用NULL值跳过要跳过的属性。

// config\logging.php

<?php

use Monolog\Handler\NullHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\SyslogUdpHandler;

return [
    'channels' => [
        'stack' => [
            'driver' => 'stack',
-            'channels' => ['single'],
+            'channels' => ['single', 'custom'],
            'ignore_exceptions' => false
        ],

         # MICROSOFT TEAMS MONOLOG HANDLER
+       'custom' => [
+            'driver' => 'custom',
+            'via' => \bitbirddev\MicrosoftTeamsNotifier\LogMonolog::class,
+            'webhookDsn' => 'https://env('MICROSOFT_TEAMS_WEBHOOK_URL)',
+            'level'  => env('LOG_LEVEL', 'debug'), // or simply 'debug'
+            'title'  => 'Message Title', // can be NULL
+            'subject'  => 'Message Subject', // can be NULL
+            'emoji'  => '&#x1F3C1', // can be NULL
+            'color'  => '#fd0404', // can be NULL
+            'format' => '[%datetime%] %channel%.%level_name%: %message%' // can be NULL
+        ],

...

驱动程序
每个通道的关键部分,定义了日志消息如何以及在哪里记录。'custom'驱动程序调用指定的工厂来创建通道。

via
将被调用的工厂类,以创建Monolog实例

webhookDsn
Microsoft Teams webhook URL

级别
处理器被触发并记录到通道中的消息的最小级别(Monolog/Logger类:'debug' = 100)

标题(可为空)
Microsoft Teams消息的标题

主题(可为空)
Microsoft Teams消息的主题

emoji(可为空)
Microsoft Teams消息的emoji(显示在消息标题旁边)。值需要反映以下模式:‘&#x<EMOJI_HEX_CODE>’

颜色(可为空)
消息卡颜色主题的十六进制颜色值

格式(可为空)
消息模板 - 可用选项:%datetime% | %extra.token% | %channel% | %level_name% | %message%

用法

正确配置的Symfony/Laravel服务将根据分配的级别自动在Microsoft Teams中引发日志。

Symfony - 手动消息

// LoggerInterface $logger
$logger->info('Info message with custom Handler');
$logger->error('Error message with custom Handler');

Laravel - 手动消息

// Illuminate\Support\Facades\Log
Log::channel('custom')->info('Info message with custom Handler');
Log::channel('custom')->error('Error message with custom Handler');

许可证

代码可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。