Skip to content

日志服务

YasuiJS 包含内置的日志服务,具有计时功能和彩色编码输出。它为您的应用程序提供结构化日志记录,包含请求特定上下文和性能监控。

日志记录器可以通过构造函数注入到服务和控制器中,或者使用 @Logger() 装饰器直接在方法参数中访问。

typescript
import { Injectable, LoggerService } from 'yasui';

@Injectable()
export class UserService {
  constructor(private readonly logger: LoggerService) {}

  getUser(id: string) {
    this.logger.log('获取用户', { userId: id });
    const user = this.findUser(id);
    this.logger.success('用户成功找到');
    return user;
  }
}

使用 LoggerService

构造函数注入

在服务或控制器构造函数中注入日志服务:

typescript
@Injectable()
export class UserService {
  constructor(private readonly logger: LoggerService) {}

  createUser(userData: any) {
    this.logger.log('创建新用户');
    // 业务逻辑在这里
    this.logger.success('用户创建成功');
  }
}

@Controller('/users')
export class UserController {
  constructor(private readonly logger: LoggerService) {}

  @Get('/')
  getUsers() {
    this.logger.log('获取所有用户');
    return this.userService.getAllUsers();
  }
}

方法级访问

  • @Logger() - 获取请求特定的日志记录器实例(无参数)

使用 @Logger() 装饰器获取专用的日志记录器实例,该实例在路由开始时自动启动。这对于在调试模式下跟踪整个操作的时间非常有用。这在控制器方法和中间件方法中都可以使用。

typescript
import { LoggerService } from 'yasui';

@Controller('/api/users')
export class UserController {
  @Get('/')
  getUsers(@Logger() logger: LoggerService) {
    logger.log('处理用户列表请求');
    // 日志记录器已经启动,计时是自动的
    const users = this.fetchUsers();
    logger.success(`找到 ${users.length} 个用户`);
    return users;
  }
}

@Middleware()
export class RequestLoggerMiddleware {
  use(
    @Req() req: Request,
    @Logger() logger: LoggerService,
    @Next() next: NextFunction
  ) {
    logger.log('收到请求', { method: req.method, path: req.path });
    next();
  }
}

日志方法

LoggerService 提供了几种不同日志级别的方法:

typescript
@Injectable()
export class ExampleService {
  constructor(private logger: LoggerService) {}

  demonstrateLogs() {
    // 一般信息
    this.logger.log('应用程序已启动');
    // 调试信息(详细)
    this.logger.debug('调试信息', { details: '额外数据' });
    // 成功消息
    this.logger.success('操作成功完成');
    // 警告消息
    this.logger.warn('警告:使用了已弃用的方法');
    // 错误消息
    this.logger.error('发生错误', { error: '详情' });
  }
}

计时功能

日志记录器包含内置的计时功能,用于性能监控:

typescript
@Injectable()
export class DataService {
  constructor(private logger: LoggerService) {}

  processData() {
    this.logger.start(); // 开始计时
    
    const data = this.fetchData();
    const elapsed = this.logger.stop(); // 停止并获取经过的时间
    this.logger.log(`处理完成,耗时 ${elapsed}ms`);
    
    return data;
  }

  batchProcess(items: any[]) {
    this.logger.start();
    
    for (const item of items) {
      this.processItem(item);
      this.logger.reset(); // 为下一个项目重置计时器
    }
    
    // 获取当前经过的时间,不停止计时
    const currentTime = this.logger.getTime();
    this.logger.debug(`当前处理时间:${currentTime}ms`);
  }
}

调试模式集成

当在 YasuiJS 配置中启用调试模式时,日志记录器提供更详细的输出:

typescript
yasui.createServer({
  controllers: [UserController],
  debug: true // 启用详细日志记录
});

在调试模式下:

  • 所有传入的请求都会自动记录
  • 显示调试消息
  • 显示更详细的错误信息

根据AGPL v3许可证发布。