zhengyiming
2025-09-28 464723fb4351541205e976c4a939cd34dcf0452c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import * as logRecordsServices from '@/services/api/logRecords';
import config from '@config/config';
import { LoggerRecord, LogOptions, LoggerRecordOptions, LoggerRecordLevel } from 'senior-request';
 
type HttpLogOptions = {
  httpParams?: Omit<API.SaveFrontConsoleLogCommand, 'level' | 'content'>;
} & LogOptions;
 
class HttpLoggerRecord extends LoggerRecord<HttpLogOptions> {
  constructor(options: LoggerRecordOptions = {}) {
    super(options);
  }
 
  convertLogLevel(level: LoggerRecordLevel): EnumLogLevel {
    switch (level) {
      case 'debug':
        return EnumLogLevel.Debug;
      case 'info':
        return EnumLogLevel.Information;
      case 'warn':
        return EnumLogLevel.Warning;
      case 'error':
        return EnumLogLevel.Error;
      case 'log':
        return EnumLogLevel.Trace;
      default:
        return EnumLogLevel.Debug;
    }
  }
 
  log(level: LoggerRecordLevel, options: HttpLogOptions): void {
    const httpUrl = options?.httpParams?.url ?? '';
    if (httpUrl.toLowerCase().includes('saveFrontConsoleLog'.toLowerCase())) return;
    const args = [...(options.args || []), options.httpParams].filter(Boolean);
    super.log(level, {
      ...options,
      args: args,
    });
    let params: API.SaveFrontConsoleLogCommand = {
      /** 跟踪Id */
      traceId: options.httpParams?.traceId,
      level: this.convertLogLevel(level),
      /** 内容 */
      content: `[${this.config.moduleName}] ${options.message}`,
      /** 堆栈跟踪 */
      stackTrace: options.httpParams?.stackTrace,
      /** 链接地址 */
      url: options.httpParams?.url,
      ext: JSON.stringify(args),
    };
    logRecordsServices.saveFrontConsoleLog(params, { showLoading: false, skipErrorHandler: true });
  }
}
 
export const httpLoggerRecord = new HttpLoggerRecord({
  moduleName: config.title,
  enableStorage: true,
});