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

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

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/66206.html<

(0)
运维的头像运维
上一篇2025-02-02 23:06
下一篇 2025-02-02 23:06

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注