wujingjing
2024-09-29 851d393a19c3f45b4de37d2a6c621615b55d01d0
报错日志
已修改1个文件
已添加1个文件
90 ■■■■■ 文件已修改
src/model/logger/Logger.ts 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/model/logger/Logger.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
import { formatDate } from "/@/utils/formatTime";
export class Logger {
    static level = 'DEBUG'; // é»˜è®¤ä¸ºDEBUG级别
    static shouldLog(level) {
        const levels = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'];
        return levels.indexOf(level) >= levels.indexOf(this.level);
    }
    static formatStack(stack) {
        if (!stack) return '';
        // æ ¼å¼åŒ–错误堆栈的逻辑
        return stack
            .split('\n')
            .map((line) => `    at ${line}`)
            .join('\n');
    }
    static log(level, message, error?) {
        const timestamp = formatDate(new Date());
        const stack = error ? `\n${this.formatStack(error.stack)}` : '';
        const formattedMessage = `[${timestamp}] [${level}] ${message} ${stack}`;
        switch (level) {
            case 'DEBUG':
                console.debug(formattedMessage);
                break;
            case 'INFO':
                console.info(formattedMessage);
                break;
            case 'WARN':
                console.warn(formattedMessage);
                break;
            case 'ERROR':
            case 'FATAL':
                console.error(formattedMessage);
                break;
            default:
                console.log(formattedMessage);
        }
    }
    //      // æ ¹æ®çŽ¯å¢ƒå˜é‡åˆ¤æ–­æ˜¯å¦å‘é€æ—¥å¿—åˆ°åŽç«¯
    // if (process.env.NODE_ENV === 'production') {
    //     this.sendLog(formattedMessage);
    //   }
    // static sendLog(message) {
    //     // å‡è®¾æˆ‘们有一个日志收集的API
    //     const logEndpoint = '/api/logs';
    //     fetch(logEndpoint, {
    //         method: 'POST',
    //         headers: {
    //             'Content-Type': 'application/json',
    //         },
    //         body: JSON.stringify({ message }),
    //     }).catch((error) => {
    //         console.error('Failed to send log', error);
    //     });
    // }
    static debug(message) {
        this.log('DEBUG', message);
    }
    static info(message) {
        this.log('INFO', message);
    }
    static warn(message) {
        this.log('WARN', message);
    }
    static error(message, error?) {
        this.log('ERROR', message, error);
    }
    static fatal(message, error?) {
        this.log('FATAL', message, error);
    }
}
src/utils/request.ts
@@ -5,6 +5,7 @@
import { debounce } from './util';
import { AUTH_URL, MAIN_URL, SECONDARY_URL } from '/@/constants';
import { Local, Session } from '/@/utils/storage';
import { Logger } from '../model/logger/Logger';
// import JSONbig from 'json-bigint';
export type ExtraConfig = {
    loading?: boolean;
@@ -114,17 +115,17 @@
                    case ErrorCode.Auth:
                        handleNoAuth();
                        throw '权限验证失败';
                        break;
                    case ErrorCode.Exception:
                        ElMessage.error('内部错误!');
                        throw '内部错误';
                        Logger.error('响应失败', serveData?.json_msg && new Error(serveData?.json_msg));
                        return res.data;
                }
                // éž message error,且 handleFail ä¸º true
                // message error ä¸éœ€è¦å¤„理
                if (handleFail && serveData?.err_code !== ErrorCode.Message) {
                    const errorText = serveData?.json_msg || '响应失败!';
                    const errorText = serveData?.json_msg;
                    ElMessage.error(errorText);
                    throw errorText;
                    Logger.error('响应失败', errorText && new Error(errorText));
                }
            }
            return res.data;