TypeScript 语言 类装饰器实现 API 请求日志记录

TypeScript阿木 发布于 2025-05-29 7 次阅读


TypeScript 类装饰器实现 API 请求日志记录

在软件开发过程中,日志记录是一个非常重要的环节,它可以帮助开发者了解程序的运行状态,追踪错误,优化性能。特别是在API请求的处理过程中,记录请求的详细信息对于调试和监控尤为重要。本文将探讨如何使用TypeScript的类装饰器来实现API请求的日志记录功能。

类装饰器简介

在TypeScript中,类装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问符、属性或参数上。类装饰器在编译阶段运行,用于修改或增强类的行为。

实现API请求日志记录

为了实现API请求的日志记录,我们可以创建一个类装饰器,该装饰器能够拦截类的实例方法,并在方法执行前后记录相关信息。

1. 创建日志记录装饰器

我们需要创建一个装饰器,该装饰器将负责记录方法执行前后的信息。

typescript
function LogRequest(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;

descriptor.value = function(...args: any[]) {
console.log(`Method ${propertyKey} called with arguments:`, args);
const result = originalMethod.apply(this, args);
console.log(`Method ${propertyKey} returned:`, result);
return result;
};

return descriptor;
}

在这个装饰器中,我们首先获取了原始的方法实现,然后创建了一个新的方法实现,该实现首先打印出方法调用的参数,然后调用原始方法,并打印出返回值。

2. 应用装饰器到API类

接下来,我们将这个装饰器应用到我们的API类中,特别是那些需要进行日志记录的方法。

typescript
class MyApiService {
@LogRequest
public getSomething(id: number): string {
// 模拟API请求
return `Data for ID: ${id}`;
}
}

在这个例子中,`getSomething` 方法被 `LogRequest` 装饰器装饰,因此每次调用这个方法时,都会打印出方法的调用参数和返回值。

3. 测试日志记录功能

为了验证日志记录功能是否正常工作,我们可以创建一个 `MyApiService` 的实例并调用 `getSomething` 方法。

typescript
const apiService = new MyApiService();
console.log(apiService.getSomething(123));

当你运行这段代码时,你应该会看到控制台输出了方法调用的参数和返回值。

扩展功能

上述实现是一个简单的日志记录装饰器。在实际应用中,你可能需要扩展这个装饰器以支持更多的功能,例如:

- 记录请求的时间戳
- 记录请求的响应时间
- 记录请求的URL和HTTP状态码
- 将日志信息写入文件或数据库

以下是一个扩展后的装饰器示例,它记录了请求的时间戳和响应时间:

typescript
function LogRequestEnhanced(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;

descriptor.value = function(...args: any[]) {
const startTime = Date.now();
console.log(`Method ${propertyKey} called with arguments:`, args);
const result = originalMethod.apply(this, args);
const endTime = Date.now();
console.log(`Method ${propertyKey} returned:`, result);
console.log(`Method ${propertyKey} took ${endTime - startTime}ms to execute.`);
return result;
};

return descriptor;
}

总结

使用TypeScript的类装饰器来实现API请求的日志记录是一个简单而有效的方法。通过装饰器,我们可以轻松地为类的方法添加日志记录功能,而不需要修改原始的方法实现。在实际开发中,根据需求扩展装饰器的功能,可以帮助我们更好地监控和调试应用程序。