Elasticsearch记录日志,正确响应不记录结果,只记录错误请求

Elasticsearch记录日志,正确响应不记录结果,只记录有请求过;发生错误的话记录完整参数及错误信息:

自定义个Logger类:

# \Lib\Utils\MyEsLogger.class.php
<?php

class MyEsLogger implements Psr\Log\LoggerInterface
{
    private $logFile;

    public function __construct($logFile)
    {
        $this->logFile = $logFile;
    }

    public function emergency($message, array $context = [])
    {
        $this->log('emergency', $message, $context);
    }

    public function alert($message, array $context = [])
    {
        $this->log('alert', $message, $context);
    }

    public function critical($message, array $context = [])
    {
        $this->log('critical', $message, $context);
    }

    public function error($message, array $context = [])
    {
        $this->log('error', $message, $context);
    }

    public function warning($message, array $context = [])
    {
        $this->log('warning', $message, $context);
    }

    public function notice($message, array $context = [])
    {
        $this->log('notice', $message, $context);
    }

    public function info($message, array $context = [])
    {
        $this->log('info', $message, $context);
    }

    public function debug($message, array $context = [])
    {
        $this->log('debug', $message, $context);
    }

    public function log($level, $message, array $context = [])
    {
        // echo json_encode([$level, $message,$context], 320);
        // 检查日志级别是否为 'error' 或更高
        if (in_array($level, ['error', 'critical', 'alert','warning', 'emergency'])) {
            // 保留 'response' 键的值
            $logEntry = sprintf(
                "[%s] %s: %s\n",
                date('Y-m-d H:i:s'),
                strtoupper($level),
                $this->formatMessage($message, $context)
            );
        } else {
            // 在其他情况下移除 'response' 键
            if ($message == 'Response') {
                $context = '正确响应不记录响应结果。';
            }
            $logEntry = sprintf(
                "[%s] %s: %s\n",
                date('Y-m-d H:i:s'),
                strtoupper($level),
                $this->formatMessage($message, $context)
            );
        }

        file_put_contents($this->logFile, $logEntry, FILE_APPEND);
    }

    private function formatMessage($message, $context)
    {
        if (is_array($message) || is_object($message)) {
            $message = json_encode($message, 320);
        }

        if (!empty($context)) {
            $message .= ' ' . json_encode($context, 320);
        }

        return $message;
    }
}

然后建立客户端的时候设置logger即可:

$logger = new MyEsLogger(LOG_PATH . date('y_m') . '_es_trace.log');
# vendor\elasticsearch\elasticsearch\src\Elasticsearch\ClientBuilder.php
$client = ClientBuilder::create()->setHosts([WEBACCESSLOG_ES])
    ->setLogger($logger)
    ->build();
// echo json_encode($query['body']).PHP_EOL.PHP_EOL;die();
$result = $client->search($query);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值