原因

公司的php项目之前的日志基本是存数据库,存服务器文件,存在占用数据库大量空间,日志查看存在难以看到完整上下文,服务器上查找日志困难等问题,急需解决方案

方案

1.购买阿里云ELK:缺点贵

2.购买阿里云服务器自己搭ELK:虽然便宜些,但是增加运维成本

3.使用阿里云的日志服务,官方示例项目

  • 优点:1.便宜 2:方便接入 3:机器人日志已有使用经验 4:在app即将上线的时候能够快速接入

示例项目

  1. 依赖引入

    1. 进入项目根目录,执行

      composer require –prefer-dist ranvk/yii2-aliyun-logtarget -vvv

    2. composer.json文件中会增加

      "ranvk/yii2-aliyun-logtarget": "^18.3"
      
  2. 修改配置,dev和local环境配置阿里云的外网地址,才可以上传日志,在线上的test和prod环境,使用内网地址,加快日志上传速度

    1. api/config/dev/main.php
    2. 修改log的组件
```php
'components' => [
    'log' => [
        'targets' => [
            [
                'class' => 'yii\log\FileTarget',
                'levels' => ['error', 'warning', 'trace', 'info'],
            ],
            [
                'levels' => ['error', 'warning', 'info'],
                'class' => 'Ranvk\Yii2AliyunLogtarget\AliyunLogTarget',
                'logstore' => 'www-xxx-com',
                'topic' => YII_ENV,
                'project' => 'c5game-webserver',
                'accessKeyId' => 'xxx',
                'accessKeySecret' => 'xxx',
                'endpoint' => 'cn-shanghai.log.aliyuncs.com', //外网地址,内网地址为cn-shanghai-intranet.log.aliyuncs.com
            ],
        ],
    ],
```

1. 其他环境的配置文件类似,别忘了修改
2. 具体代码 [http://xxxx/-/merge_requests/49/diffs](http://git.c5game.com/zbt/www.zbt.com/-/merge_requests/49/diffs)

查询示例

网址:https://sls.console.aliyun.com/lognext/project/xxx

授权才能访问

比如要查prod环境的异常拦截处理器中的关于库存请求相关的日志

exceptionHandle and “inventory” and topic: prod

更多查询方式看文档

总结

  1. 配置的时候要注意,dev环境使用的阿里云的公网上传日志地址,test和prod环境使用内网传输提高速度,也免收流量费,主要是endpoint配置,topic存环境,区分dev,test,prod

参考文章

  1. https://github.com/ranvk/yii2-aliyun-logtarget