需求

记录所有前台用户请求返回数据到ES

实践

引用拓展包

$ composer require ruflin/elastica: ^5.0

ruflin/elastica 拓展包说明

Elastica ElasticSearch elasticsearch-php PHP
5.x 5.x ^5.0 >=5.6
3.2.3 (unmaintained) 2.4.0 no >=5.4
2.x (unmaintained) 1.7.2 no >=5.3.3

由于项目中已经继承了BaseController ,其中有所有接口通过showReturnCodeAndSaveLog返回(也可以通过中间件的方式去实现)


/*** 返回函数* * @param        $code* @param string $msg* @param array  $data** @return array*/protected function showReturnCodeAndSaveLog($code, $msg = '', $data = []){//添加日志内容$this->addLog($msg, $data);//返回信息return self::showReturnCode($code, $msg, $data);}

添加析构函数

/*** 保存日志动作*/protected function saveLogAction(){if (!empty($this->log)) {//获取文件前缀&&es的type$file_title = $this->getLogTitle();//添加es日志记录队列$job     = (new JobEsMonolog($this->request->method(), $this->log, $file_title))->onQueue(config('queue_list.lcsc'));dispatch($job);//添加文本日志if ($file_title) {$log = newLogRecord($file_title . '-' . date('Ymd'), env('APP_NAME'));foreach ($this->log as $info) {$log->info($this->request->method(), $info);}} else {info($this->request->method(), $this->log);}}}public function __destruct(){if (!empty($this->log) && $this->saveLog == true) {//保存日志$this->saveLogAction();}}

添加job

$ php artisan make:job JobEsMonolog

JobEsMonolog.php

<?phpnamespace App\Jobs;use Elastica\Client;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Monolog\Formatter\ElasticaFormatter;
use Monolog\Handler\ElasticSearchHandler;
use Monolog\Logger;class JobEsMonolog implements ShouldQueue
{use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;//日志messageprivate $msg;//日志内容private $data;//es typeprivate $type;//错误级别private $level;/*** Create a new job instance.** @return void*/public function __construct($msg,$data,$type = 'orders',$level = Logger::INFO){$this->msg   = $msg;$this->data  = $data;$this->type  = $type;$this->level = $level;}/*** Execute the job.** @return void*/public function handle(){//es host配置$es_host = env('ES_HOSTS','192.168.12.35:9202');$es_host_array = explode(':',$es_host);$config = ['host'=>$es_host_array[0],'port'=>$es_host_array[1],];$client  = new Client($config);$options = ['index' => 'monolog_' . date('Y_m_d'),'type'  => $this->type,];$handler = new ElasticSearchHandler($client, $options);//es formatter$formatter = new ElasticaFormatter($options['index'],$options['type']);$handler->setFormatter($formatter);$log = new Logger('monolog');$log->pushHandler($handler);//目前暂时引用两种switch ($this->level) {case Logger::INFO :$log->info($this->msg,$this->data);break;case Logger::DEBUG :$log->debug($this->msg,$this->data);break;default :$log->warning('未添加错误类型',$this->data);break;}}
}

kibana 中显示

其实对于大家来说就只有JobEsMonolog代码比较有参考价值;

laravel接合monolog实现日志记录到Elasticsearch实践相关推荐

  1. 关于 Node.js 应用里使用 winston 进行日志记录的最佳实践

    Logging with Winston and Node.js 假设您有一个在生产环境中运行的应用程序,每天有数百万用户赚取数千美元.应用程序可能存在错误的原因有多种,作为开发人员,您需要找出原因并 ...

  2. monolog php,Monolog:PHP 日志记录工具

    Monolog是php下比较全又容易扩展的记录日志组件.目前有包括Symfony .Laravel. CakePHP等诸多知名php框架都内置了Monolog. Monolog可以把你的日志发送到文件 ...

  3. PHP日志记录工具Monolog

    github地址:https://github.com/Seldaek/monolog 使用 Monolog 安装 核心概念 日志级别 配置一个日志服务 为记录添加额外的数据 使用通道 自定义日志格式 ...

  4. nginx php 错误日志,PHP 错误与异常的日志记录

    提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到 ...

  5. PHP 错误与异常的日志记录

    提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到 ...

  6. exception日志 php_PHP 错误与异常的日志记录

    提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到 ...

  7. exception日志 php_PHP中错误与异常的日志记录用法分析

    本文分析了PHP中错误与异常的日志记录用法.分享给大家供大家参考,具体如下: 提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 ...

  8. Monolog php日志

    本文转自https://blog.csdn.net/thinking771470736/article/details/80927889 Monolog 是PHP的一个日志类库.相比于其他的日志类库, ...

  9. 度量,跟踪和日志记录

    今天,我有幸参加了2017年的分布式追踪峰会,其中有很多来自AWS / X-Ray,OpenZipkin,OpenTracing,Instana,Datadog,Librato等公司的人员,我很遗憾我 ...

最新文章

  1. CodeForces 595A
  2. 全网仅此一篇:工业级压力传感器设计及实现(华大半导体HC32L136)
  3. eclipse--各类型版本包含插件比较
  4. expressjs路由匹配规则
  5. android 退出程序提示是否退出对话框
  6. 一个快速实现彩屏应用的跨平台快速原型开发工具平台,最重要的是还免费!8ms.xyz平台原以为是单片机版墨刀,今天上去玩了才知道平台厉害的很,基于WEB端免搭建开发环境,跑的还是C代码编译出来的程序!
  7. Alibaba Cloud Linux 技术图谱首发,分享学习感言得大奖!
  8. 海量小文件场景下训练加速优化之路
  9. Java学习二:Javac Java的学习(原创)
  10. 青云QingCloud携手伟仕佳杰打造专业企业级云服务
  11. matlab函数集锦
  12. 文件包含漏洞的审计(审计思路)
  13. SpringBoot+Ajax文件上传+FormData表单提交
  14. MATLAB生成(对角线上元素相同的)三对角矩阵的实例
  15. 语音可懂度评估(一)——基于清晰度指数的方法
  16. hbase 问题之 File system needs to be upgraded. You have version null and I want ver
  17. 美国南加州大学骆沁毅:构建高性能的异构分布式训练算法
  18. 苹果微信换行怎么打_苹果手机微信怎么加密,教你几招快速加密
  19. js面向对象怎么理解
  20. 等待事件 latch:cache buffers chains

热门文章

  1. SAP ABAP守护进程(ABAP Daemon)的实现方式
  2. 2012服务器系统自动重启,Windows server 2012r2 自动重启
  3. 【BZOJ4355】Play with sequence 线段树
  4. 关于兼容北斗版本808协议中位置信息汇报0x0200的解析
  5. 正在播放2020Me比较特别的我_【一点资讯】电视剧播放指数榜单,《燕云台》有望成为爆款,只因这两点真不错 www.yidianzixun.com...
  6. 通过浏览器测试POST请求
  7. MATLAB figure最大化
  8. 电脑无法连接mysql_本地电脑无法连接到MySQL
  9. hive数据备份方案
  10. 大学计算机VB考试试题,大学计算机二级VB测试题