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);