New file |
| | |
| | | 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 ?? ''; |
| | | }, |
| | | }); |