feat:优化日志输出

This commit is contained in:
Jerry 2025-10-15 15:03:03 +08:00
parent 7a5a9edde3
commit c2194e6140
5 changed files with 39 additions and 27 deletions

View File

@ -26,21 +26,21 @@ export class AllExceptionsFilter implements ExceptionFilter {
if (exception instanceof HttpException) {
status = exception.getStatus();
message = exception.message;
// 获取HttpException的详细信息
const exceptionResponse = exception.getResponse();
if (typeof exceptionResponse === 'object' && exceptionResponse !== null) {
errorDetails = exceptionResponse;
}
} else {
status = HttpStatus.INTERNAL_SERVER_ERROR;
// 处理非HttpException的错误
if (exception instanceof Error) {
message = exception.message || '服务器内部错误';
errorDetails = {
name: exception.name,
stack: process.env.NODE_ENV === 'development' ? exception.stack : undefined,
stack:
process.env.NODE_ENV === 'development'
? exception.stack
: undefined,
};
} else {
message = '服务器内部错误';
@ -48,17 +48,16 @@ export class AllExceptionsFilter implements ExceptionFilter {
}
}
// 记录错误日志
this.logger.error(
`异常捕获 - ${request.method} ${request.url} - ${status} - ${message}`,
exception instanceof Error ? exception.stack : exception,
);
const errorResponse = {
success: false,
data: null,
message,
...(process.env.NODE_ENV === 'development' && errorDetails && { errorDetails }),
...(process.env.NODE_ENV === 'development' &&
errorDetails && { errorDetails }),
};
response.status(status).json(errorResponse);

View File

@ -1,9 +1,10 @@
import { HttpException, HttpStatus } from '@nestjs/common';
import { HttpException, HttpStatus, Logger } from '@nestjs/common';
/**
*
*/
export class ErrorUtil {
private static readonly logger = new Logger(ErrorUtil.name);
/**
*
* @param message
@ -30,7 +31,10 @@ export class ErrorUtil {
* @param message
* @param originalError
*/
static createInternalError(message: string, originalError?: any): HttpException {
static createInternalError(
message: string,
originalError?: any,
): HttpException {
return new HttpException(
{
message,
@ -46,11 +50,14 @@ export class ErrorUtil {
* @param resource
* @param identifier
*/
static createNotFoundError(resource: string, identifier?: string): HttpException {
const message = identifier
static createNotFoundError(
resource: string,
identifier?: string,
): HttpException {
const message = identifier
? `${resource} '${identifier}' 不存在`
: `${resource} 不存在`;
return this.createBusinessError(message, HttpStatus.NOT_FOUND);
}
@ -74,14 +81,26 @@ export class ErrorUtil {
* HttpException
* @param error
* @param defaultMessage
* @param context
*/
static handleUnknownError(error: any, defaultMessage: string = '服务器内部错误'): HttpException {
static handleUnknownError(
error: any,
defaultMessage: string = '服务器内部错误',
context?: string,
): HttpException {
const errorMsg = error?.message || String(error);
const logMessage = context ? `${context}: ${errorMsg}` : errorMsg;
this.logger.error(logMessage);
if (error instanceof HttpException) {
return error;
}
if (error instanceof Error) {
return this.createInternalError(`${defaultMessage}: ${error.message}`, error);
return this.createInternalError(
`${defaultMessage}: ${error.message}`,
error,
);
}
return this.createInternalError(`${defaultMessage}: ${String(error)}`);

View File

@ -29,8 +29,7 @@ export class CdnController {
this.logger.log(`成功投递文件: ${filePath}`);
} catch (error) {
this.logger.error('晶灵数据请求处理失败:', error);
throw ErrorUtil.handleUnknownError(error, 'CDN处理文件请求失败');
throw ErrorUtil.handleUnknownError(error, 'CDN处理文件请求失败', 'deliverFile');
}
}

View File

@ -177,8 +177,7 @@ export class MemeController {
stream.pipe(throttle).pipe(res);
}
} catch (e) {
this.logger.error(`获取表情包失败:${e.message}`);
throw ErrorUtil.handleUnknownError(e, '获取表情包失败');
throw ErrorUtil.handleUnknownError(e, '获取表情包失败', 'handleMemeRequest');
}
}
@ -271,8 +270,7 @@ export class MemeController {
this.logger.log(`表情包上传成功: ${remoteFilePath}`);
return '表情上传成功..';
} catch (error) {
this.logger.error('表情包上传失败:', error);
throw ErrorUtil.handleUnknownError(error, '上传失败');
throw ErrorUtil.handleUnknownError(error, '上传失败', 'uploadMeme');
}
}
}

View File

@ -73,8 +73,7 @@ export class WordsController {
return text;
} catch (e) {
this.logger.error(`getText 失败: ${e}`);
throw ErrorUtil.handleUnknownError(e, '获取文案失败');
throw ErrorUtil.handleUnknownError(e, '获取文案失败', 'getText');
}
}
@ -110,8 +109,7 @@ export class WordsController {
throw ErrorUtil.createBusinessError('重载失败', HttpStatus.BAD_REQUEST);
}
} catch (e) {
this.logger.error(`reloadWord 失败: ${e}`);
throw ErrorUtil.handleUnknownError(e, '重载文案失败');
throw ErrorUtil.handleUnknownError(e, '重载文案失败', 'reloadWord');
}
}
@ -134,8 +132,7 @@ export class WordsController {
}
return names;
} catch (e) {
this.logger.error(`listWords 失败: ${e}`);
throw ErrorUtil.handleUnknownError(e, '获取文案列表失败');
throw ErrorUtil.handleUnknownError(e, '获取文案列表失败', 'listWords');
}
}
}