class Logger {
private $logFile; // 存储日志文件的路径
private $placeholderValue; // 占位符值
private $fieldsToNull; // 需要置空的字段列表
/**
* 构造函数,初始化日志记录器
*
* @param string $logFilePath 日志文件的完整路径
* @param mixed $placeholderValue 用作占位符的值
* @param array $fieldsToNull 需要置空的字段名数组
*/
public function __construct($logFilePath, $placeholderValue = null, $fieldsToNull = []) {
$this->logFile = $logFilePath;
$this->placeholderValue = $placeholderValue;
$this->fieldsToNull = $fieldsToNull;
}
/**
* 记录日志消息到日志文件
*
* @param mixed $message 要记录的日志消息
* @param string $logLevel 日志级别(默认为 'info')
*/
public function log($message, $logLevel = 'info') {
$timestamp = date('Y-m-d H:i:s');
$logMessage = "[$timestamp][$logLevel] " . $this->formatMessage($message) . PHP_EOL;
file_put_contents($this->logFile, $logMessage, FILE_APPEND);
}
/**
* 格式化日志消息
*
* @param mixed $message 要格式化的消息
* @return string 返回格式化后的消息
*/
public function formatMessage($message) {
$message = $this->nullFieldsRecursively($message, $this->fieldsToNull);
return json_encode($message, JSON_PRETTY_PRINT);
}
/**
* 递归地将字段置空
*
* @param mixed $data 要处理的数据
* @param array $fields 需要置空的字段名数组
* @return mixed 处理后的数据
*/
private function nullFieldsRecursively($data, $fields) {
if (is_array($data)) {
foreach ($fields as $field) {
if (array_key_exists($field, $data)) {
$data[$field] = $this->placeholderValue;
}
}
foreach ($data as $key => $value) {
$data[$key] = $this->nullFieldsRecursively($value, $fields);
}
}
return $data;
}
/**
* 记录信息级别的日志
*
* @param mixed $message 要记录的信息消息
*/
public function info($message) {
$this->log($message, 'info');
}
/**
* 记录错误级别的日志
*
* @param mixed $message 要记录的错误消息
*/
public function error($message) {
$this->log($message, 'error');
}
/**
* 记录警告级别的日志
*
* @param mixed $message 要记录的警告消息
*/
public function warning($message) {
$this->log($message, 'warning');
}
/**
* 记录调试级别的日志
*
* @param mixed $message 要记录的调试消息
*/
public function debug($message) {
$this->log($message, 'debug');
}
}
// 用法示例:
$log = new Logger('/path/to/app.log', '***', ['sensitive_field']);
$data = [
'user' => [
'id' => 123,
'name' => 'John',
'sensitive_field' => 'sensitive_data',
],
'action' => 'login',
'timestamp' => time(),
];
$log->info($data);
01-01
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交