kopitar/laravel-teams-logger

Laravel 扩展包,通过传入 webhook URL 向 Microsoft Teams 发送可配置的消息

1.0.2 2024-03-17 19:22 UTC

This package is auto-updated.

Last update: 2024-09-03 15:50:31 UTC


README

Latest Version on Packagist GitHub Tests Action Status Total downloads

使用 Laravel 的日志处理器将日志消息发送到 Microsoft Teams,使用 Teams Incoming Webhook 连接器

测试于

  • Laravel 10.x (PHP 8.3, 8.2, 8.1)
  • Laravel 11.x (PHP 8.3, 8.2)

特性

  • 发送简单样式的日志消息
  • 发送卡片样式的 *日志 消息
  • 在卡片日志消息中包含事实
  • 在卡片日志消息中包含操作
  • 可配置的内容和视觉元素(颜色、头像)

安装

使用 composer 安装此包。

$ composer require kopitar/laravel-teams-logger

配置

使用 composer 安装包后,在 config/logging.php 中创建一个新的 自定义通道

'teams' => [
    'driver'  => 'custom',
    'via'     => \Kopitar\LaravelTeamsLogger\TeamsLoggerFactory::class,
    'level'   => 'debug',
    'url'     => env('TEAMS_WEBHOOK_URL')
],

使用以下命令将此包中的 teams_logger.php 配置文件复制到您的 Laravel 配置文件夹

$ php artisan vendor:publish --tag=teams

TEAMS_WEBHOOK_URL 变量添加到您的 .env 文件中,该 URL 由您的 Microsoft Teams 连接器提供。(有关获取 webhook URL 的更多信息,请参阅MS Teams 文档

此包还有一些可选的 .env 变量,它们具有默认值。这些变量的名称可以在 config/teams_logger.php 和以下列表中找到。这些可选的 .env 变量为您提供了一种更改重试次数、禁用头像、设置默认消息类型等的方式。

  • TEAMS_LOG_NAME (日志器名称,也用作卡片类型消息的标题)
  • TEAMS_LOG_TYPE (设置三种日志消息类型之一)
  • TEAMS_RETRIES (如果请求 Teams webhook 失败,则重试的次数)
  • TEAMS_MARKDOWN (在卡片类型消息中禁用或启用 markdown)
  • TEAMS_AVATAR (在消息中禁用或启用头像图像)

要更改颜色或头像图像,您需要替换 config/teams_logger.php 中每个日志级别找到的值。

使用方法

简单类型

要向 Teams 发送简单样式的日志消息,请使用以下代码(假设 type 已配置为 simple

Log::channel('teams')->info('Neque porro quisquam est qui dolorem!');

结果

Screenshot

卡片类型

要向 Teams 发送卡片样式的日志消息,请使用以下代码(假设 type 已配置为 carduse_avatar 设置为 true

Log::channel('teams')->debug('Neque porro quisquam est qui dolorem!');

结果

Screenshot

JSON 类型

要向 Teams 发送任何样式的日志消息,您也可以简单地使用 JSON 格式的数据(假设 type 已配置为 json

Log::channel('teams')->info('{"text":"Neque porro quisquam est qui dolorem!","themeColor":"#df0087"}');

此示例将生成一个具有 themeColor#df0087 的简单日志消息

结果

Screenshot

高级使用

1. 覆盖配置

几乎任何配置值都可以通过在第二个参数中定义新值来覆盖任何日志消息。最简单的例子是覆盖 type 设置。如果您的配置指定要为日志消息使用 简单类型,但您想在代码的特定位置发送 卡片类型,您可以像以下示例中那样做

Log::channel('teams')->info(
    'Neque porro quisquam est qui dolorem!', ['type' => 'card']
);

以下示例中列出了其他可能的配置覆盖

Log::channel('teams')->debug(
    'Neque porro **quisquam** est qui dolorem! [Markdown disabled](http://example.net)',
    [
        'type' => 'card',
        'title' => 'Alternative title',
        'themeColor' => '#0000ff',
        'avatar' => false,
        'markdown' => false
    ]
);

这会将 type 设置为 '卡片',将 activityTitle 设置为 '替代标题',将 themeColor 设置为蓝色,并禁用 头像图片markdown

结果

Screenshot

如果发送 简单类型 的消息,唯一可以覆盖的配置值是 themeColor。默认使用 Markdown,无法禁用!

Log::channel('teams')->debug('Neque porro **quisquam** est qui dolorem!', ['themeColor' => '#0000ff']);

2. 事实

当使用 '卡片' 类型时,您还可以传递一个 facts 参数,它需要是一个数组。这个数组的内容随后将在卡片消息中渲染为 键:值 列表。

Log::channel('teams')->critical(
    'Neque porro quisquam est qui dolorem!',
    [
        'type' => 'card',
        'facts' => [
            'happened at' => now()->toDayDateTimeString(),
            'file' => __FILE__,
            'severity' => 'Critical'
        ],
    ]
);

结果

Screenshot

3. 操作

当使用 '卡片' 类型时,您还可以传递一个 actions 参数,它需要是一个数组。操作提供了一种在您的消息中包含 potentialAction 属性的方法,它是一个动作数组,这些动作可以在您的消息中添加交互式操作,如 添加评论、更改状态、打开链接 等。

有关更多信息,请参阅 操作 文档,链接:[learn.microsoft.com](https://learn.microsoft.com/en-us)。

        Log::channel('teams')->info("Neque porro quisquam est qui dolorem!", [
           'type' => 'card',
           'actions' => [[
                '@type' => 'ActionCard',
                'name' => 'Add a comment',
                'inputs' => [
                    [
                        '@type' => 'TextInput',
                        'id' => 'comment',
                        'isMultiline' => false,
                        'title' => 'Add a comment here for this task'
                    ]
                ],
                'actions' => [
                    [
                        '@type' => 'HttpPOST',
                        'name' => 'Add comment',
                        'target' => 'https =>//learn.microsoft.com/outlook/actionable-messages'
                    ]
                ],
            ]]
        ]);

结果

Screenshot

预览(简单类型)

Screenshot

预览(卡片类型)

Screenshot

更新日志

有关最近更改的更多信息,请参阅 更新日志

许可证

此 laravel-teams-logging 包在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE.md 文件。