laravel 日志(laravel日志采集到sls)

2024-12-08 0 128

Laravel 日志(laravel日志采集到sls)

在现代Web应用开发中,日志管理是确保应用稳定运行的重要环节。Laravel 框架提供了强大的日志功能,但默认的日志存储方式可能无法满足生产环境的需求。为了更好地管理和分析日志,我们可以将Laravel日志采集到阿里云的SLS(日志服务)中。介绍如何实现这一目标,并提供多种解决方案。

1. 解决方案

介绍两种方法将Laravel日志采集到阿里云SLS:

  1. 使用自定义日志驱动:通过创建自定义日志驱动,将日志直接发送到SLS。
  2. 使用中间件:在请求处理过程中,通过中间件将日志发送到SLS。

2. 使用自定义日志驱动

2.1 创建自定义日志驱动

我们需要创建一个自定义的日志驱动,该驱动将日志数据发送到SLS。以下是具体步骤:

  1. 安装阿里云SLS SDK
    bash
    composer require aliyuncs/aliyun-log-php-sdk

  2. 创建自定义日志驱动类
    app/Logging 目录下创建 SlsHandler.php 文件:
    ```php
    <?php

    namespace AppLogging;

    use MonologHandlerAbstractProcessingHandler;
    use AliyunLogClient;
    use AliyunLogModelsShardCursorType;
    use AliyunLogModelsLogItem;

    class SlsHandler extends AbstractProcessingHandler
    {
    protected $client;
    protected $project;
    protected $logstore;

    public function __construct($endpoint, $accessKeyId, $accessKeySecret, $project, $logstore)
    {
        parent::__construct();
        $this->client = new Client($endpoint, $accessKeyId, $accessKeySecret);
        $this->project = $project;
        $this->logstore = $logstore;
    }
    
    protected function write(array $record)
    {
        $logItem = new LogItem();
        $logItem->setTime(time());
        $logItem->PushBack('level', $record['level_name']);
        $logItem->PushBack('message', $record['message']);
        $logItem->PushBack('context', json_encode($record['context']));
    
        $this->client->PostLog($this->project, $this->logstore, [$logItem]);
    }
    

    }
    ```

  3. 注册自定义日志驱动
    config/logging.php 中添加自定义日志驱动配置:
    ```php
    'channels' => [
    'stack' => [
    'driver' => 'stack',
    'channels' => ['single', 'sls'],
    ],

    'sls' => [
        'driver' => 'custom',
        'via' => AppLoggingSlsHandler::class,
        'endpoint' => env('ALIYUN_SLS_ENDPOINT'),
        'accessKeyId' => env('ALIYUN_SLS_ACCESS_KEY_ID'),
        'accessKeySecret' => env('ALIYUN_SLS_ACCESS_KEY_SECRET'),
        'project' => env('ALIYUN_SLS_PROJECT'),
        'logstore' => env('ALIYUN_SLS_LOGSTORE'),
    ],
    

    ],
    ```

  4. 配置环境变量
    .env 文件中添加以下配置:
    env
    ALIYUN_SLS_ENDPOINT=your_endpoint
    ALIYUN_SLS_ACCESS_KEY_ID=your_access_key_id
    ALIYUN_SLS_ACCESS_KEY_SECRET=your_access_key_secret
    ALIYUN_SLS_PROJECT=your_project
    ALIYUN_SLS_LOGSTORE=your_logstore

3. 使用中间件

3.1 创建中间件

另一种方法是在请求处理过程中通过中间件将日志发送到SLS。以下是具体步骤:

  1. 创建中间件
    bash
    php artisan make:middleware SendLogToSls

  2. 编辑中间件
    app/Http/Middleware/SendLogToSls.php 文件中编辑中间件逻辑:
    ```php
    <?php

    namespace AppHttpMiddleware;

    use Closure;
    use AliyunLogClient;
    use AliyunLogModelsShardCursorType;
    use AliyunLogModelsLogItem;

    class SendLogToSls
    {
    protected $client;
    protected $project;
    protected $logstore;

    public function __construct()
    {
        $this->client = new Client(
            config('logging.channels.sls.endpoint'),
            config('logging.channels.sls.accessKeyId'),
            config('logging.channels.sls.accessKeySecret')
        );
        $this->project = config('logging.channels.sls.project');
        $this->logstore = config('logging.channels.sls.logstore');
    }
    
    public function handle($request, Closure $next)
    {
        $response = $next($request);
    
        $logItem = new LogItem();
        $logItem->setTime(time());
        $logItem->PushBack('method', $request->method());
        $logItem->PushBack('url', $request->url());
        $logItem->PushBack('ip', $request->ip());
        $logItem->PushBack('status', $response->getStatusCode());
    
        $this->client->PostLog($this->project, $this->logstore, [$logItem]);
    
        return $response;
    }
    

    }
    ```

  3. 注册中间件
    app/Http/Kernel.php 中注册中间件:
    ```php
    protected $middlewareGroups = [
    'web' => [
    // 其他中间件
    AppHttpMiddlewareSendLogToSls::class,
    ],

    'api' => [
        // 其他中间件
        AppHttpMiddlewareSendLogToSls::class,
    ],
    

    ];
    ```

4. 总结

两种将Laravel日志采集到阿里云SLS的方法:使用自定义日志驱动和使用中间件。这两种方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。通过这些方法,可以更好地管理和分析应用日志,提高系统的可维护性和稳定性。

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载