wupengfei
21 小时以前 4ef86d8a1f494caa1e136ff78f9ea258d01164b1
packages/utils/LoggerRecord/index.ts
New file
@@ -0,0 +1,74 @@
import * as logRecordsServices from '@12333/services/apiV2/logRecords';
import { LoggerRecord, LogOptions, LoggerRecordOptions, LoggerRecordLevel } from 'senior-request';
import Taro from '@tarojs/taro';
import { EnumLogLevel } from '@12333/constants';
import { storageLocal } from '../storage';
import { getUtilsConfig } from '../config';
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: getUtilsConfig().appName,
  enableStorage: true,
  loggerStorageAdapter() {
    return {
      setItem(key: string, data: any) {
        return Promise.resolve(storageLocal.setItem(key, data));
      },
      getItem(key: string) {
        return Promise.resolve(storageLocal.getItem(key));
      },
    };
  },
  getPageUrl() {
    return Taro.getCurrentInstance()?.router?.path ?? '';
  },
});