kopitar / laravel-teams-logger
Laravel 扩展包,通过传入 webhook URL 向 Microsoft Teams 发送可配置的消息
Requires
- php: ^8.1
- ext-curl: *
- monolog/monolog: ^3.0
Requires (Dev)
- illuminate/support: ^10.0|^11.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.3.1
README
使用 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!');
结果
卡片类型
要向 Teams 发送卡片样式的日志消息,请使用以下代码(假设 type
已配置为 card
且 use_avatar
设置为 true
)
Log::channel('teams')->debug('Neque porro quisquam est qui dolorem!');
结果
JSON 类型
要向 Teams 发送任何样式的日志消息,您也可以简单地使用 JSON 格式的数据(假设 type
已配置为 json
)
Log::channel('teams')->info('{"text":"Neque porro quisquam est qui dolorem!","themeColor":"#df0087"}');
此示例将生成一个具有 themeColor
为 #df0087 的简单日志消息
结果
高级使用
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。
结果
如果发送 简单类型 的消息,唯一可以覆盖的配置值是 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' ], ] );
结果
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' ] ], ]] ]);
结果
预览(简单类型)
预览(卡片类型)
更新日志
有关最近更改的更多信息,请参阅 更新日志。
许可证
此 laravel-teams-logging 包在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE.md 文件。