better-staridc-MNBT
1<?php
2/**
3 * 日志:API 调用日志(脱敏写入 mnbt_api_log 表)。
4 *
5 * @package MnbtWp
6 */
7
8namespace MnbtWp;
9
10if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12}
13
14/**
15 * 日志器。
16 */
17class Logger {
18
19 /**
20 * 记录一次 API 调用。
21 *
22 * @param int $provider_id 节点配置 ID。
23 * @param string $action MNBT gn(cfif/kt/...)。
24 * @param array $params 请求参数(写入前脱敏)。
25 * @param int $code 返回 code(200 成功 / 100 业务失败 / 0 网络错误)。
26 * @param string $msg 返回消息或错误信息。
27 * @param float $duration 耗时(秒)。
28 */
29 public static function api( $provider_id, $action, array $params, $code, $msg, $duration ) {
30 global $wpdb;
31
32 $wpdb->insert(
33 $wpdb->prefix . 'mnbt_api_log',
34 array(
35 'provider_id' => (int) $provider_id,
36 'action' => sanitize_key( (string) $action ),
37 'params_json' => wp_json_encode( self::mask( $params ) ),
38 'code' => (int) $code,
39 'msg' => mb_substr( (string) $msg, 0, 500 ),
40 'duration' => round( (float) $duration, 3 ),
41 'created_at' => current_time( 'mysql' ),
42 ),
43 array( '%d', '%s', '%s', '%d', '%s', '%f', '%s' )
44 );
45 }
46
47 /**
48 * 对敏感参数脱敏。
49 *
50 * @param array $params 原始参数。
51 * @return array
52 */
53 private static function mask( array $params ) {
54 $masked = $params;
55 foreach ( array( 'mn_key', 'mn_keye', 'password' ) as $k ) {
56 if ( array_key_exists( $k, $masked ) && '' !== $masked[ $k ] ) {
57 $masked[ $k ] = '***';
58 }
59 }
60 return $masked;
61 }
62}