如何将应用程序日志发送到Laravel的电报。
#php #laravel #telegram #logs

Laravel框架具有强大的记录系统,可让您将日志消息发送到文件,系统日志和其他各个目的地。登录Laravel是基于渠道的,每个频道都定义了编写日志消息的特定方法。例如,single频道将日志文件写入单个日志文件,而daily频道根据日期写入日志来文件。 laravel-2023-01-09.logslack频道将日志消息发送到Slack。

Laravel Loggging是在Monolog顶部创建的,Monolog是PHP项目的强大日志库。在本指南中,我们将研究如何在电报机器人API的帮助下将Laravel日志发送到电报频道。

先决条件

您需要在计算机上安装最新版本的PHP和Composer。您还应该创建一个新的Laravel项目,以便可以在本文中测试代码片段。您可以查阅Laravel的official documentation,以获取有关在机器上创建新项目的详细信息。

让我们从以下命令创建一个Laravel项目开始:

laravel new telegram-app

或者

composer create-project laravel/laravel telegram-app

使用以下命令导航到项目目录:

cd telegram-app

让我们使用以下命令在VSCODE中打开项目:

code .

探索记录配置文件

Laravel项目包括一个config目录,其中包含用于自定义项目不同方面的几个配置文件,例如数据库设置,缓存,会话管理等。此外,在logging.php文件中,此目录中还存在与记录相关的配置选项。继续并在编辑器中打开此文件以检查其内容:

<?php

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

return [

    'default' => env('LOG_CHANNEL', 'stack'),

    'deprecations' => [
        'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
        'trace' => false,
    ],

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'days' => 14,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => env('LOG_LEVEL', 'critical'),
        ],
        ...
     ]
];

正如我们所看到的,频道数组中有几个选项可用于自定义项目的日志记录方面。让我们通过设置电报频道并通过BotFather创建机器人来继续前进。打开浏览器中的链接,并通过发送消息/start开始对话。您应该收到一条消息,并以下步骤来创建机器人。

BotFather

单击/newbot,然后为您的机器人选择一个名称和用户名。该机器人将为您生成您的API令牌,如下图所示。

Bot setup

我们现在将继续创建一个新的频道LaravelDemoLogging,并将我们的新bot DemoLoggingBot添加到它。

Image description

我们需要将频道类型更改为公众。单击频道信息并编辑频道类型并将其设置为公共。另外,设置我们将在Laravel项目中与API代币一起使用的频道用户名。

Image description

接下来,让我们打开.env文件和以下变量:

TELEGRAM_API_KEY="your-api-key"
TELEGRAM_CHANNEL="@laraveldemologging"

注意:在.env文件中设置频道时,该频道必须具有 @前缀。

打开logging.php文件,并在stack数组之后添加新频道,然后像这样的频道:

'stack' => [
            'driver' => 'stack',
            'channels' => ['single', 'telegram'],
            'ignore_exceptions' => false,
],
"telegram" => [
            'driver'  => 'monolog',
            'handler' => FilterHandler::class,
            'level' => env('LOG_LEVEL', 'debug'),
            'with' => [
                'handler' => new TelegramBotHandler($apiKey = env('TELEGRAM_API_KEY'), $channel = env('TELEGRAM_CHANNEL'))

            ]
],

接下来,将电报阵列中使用的处理程序添加到文件顶部,如:

use Monolog\Handler\FilterHandler;
use Monolog\Handler\TelegramBotHandler;

让我们从终端启动Laravel Tinker,然后记录某些内容:

info("This is a demo log");

Image description

Image description

包起来

在本文中,您已经了解了Laravel中的登录以及如何设置电报频道和机器人以实时接收您的应用程序日志。

不要忘记在LinkedInTwitter

上给我大喊大叫

继续学习和愉快的编码!