elasticsearch记录日志

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

自定义个Logger类:

# LibUtilsMyEsLogger.class.php
<?php

class MyEsLogger implements PsrLogLoggerInterface
{
    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: %sn",
                date('Y-m-d H:i:s'),
                strtoupper($level),
                $this->formatMessage($message, $context)
            );
        } else {
            // 在其他情况下移除 'response' 键
            if ($message == 'Response') {
                $context = '正确响应不记录响应结果。';
            }
            $logEntry = sprintf(
                "[%s] %s: %sn",
                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');
# vendorelasticsearchelasticsearchsrcElasticsearchClientBuilder.php
$client = ClientBuilder::create()->setHosts([WEBACCESSLOG_ES])
    ->setLogger($logger)
    ->build();
// echo json_encode($query['body']).PHP_EOL.PHP_EOL;die();
$result = $client->search($query);

所有用户都可以去薅羊毛,192元充值200元话费!先到先得!导航栏话费充值,正规可靠,快充慢充自由选择。
欧阳逸资源站 » elasticsearch记录日志

发表评论