Skip to content

Task 1-1: Replace console.log với NestJS Logger

Phase: 1 Priority: Medium Module: biconomy Depends on: Không có Reference: docs/bountyhunter-blockchain-p2/details/feature-evm-integration/SPEC.md

Background

BiconomyProcessorBiconomyService hiện đang sử dụng console.log() / console.error() thay vì NestJS Logger. Điều này làm cho logs không có cấu trúc nhất quán, thiếu context (class name, timestamp chuẩn), và không thể tắt/bật theo log level. BiconomyProcessor đã khai báo private readonly logger = new Logger(BiconomyProcessor.name) nhưng chưa áp dụng triệt để. Ngoài ra, một số log dạng raw error có thể vô tình expose private key.

Tasks

Note: Logger của NestJS được import từ @nestjs/common. BiconomyProcessor đã có private readonly logger = new Logger(BiconomyProcessor.name) — chỉ cần thay thế các console.log/console.error còn lại. Với BiconomyService, thêm private readonly logger = new Logger(BiconomyService.name) vào constructor hoặc khai báo như class property.

  • [ ] Tìm toàn bộ console.logconsole.error trong biconomy.processor.tsbiconomy.service.ts
  • [ ] Thay thế bằng các method logger tương ứng:
    // Trước:
    console.log('Processing job:', job.id);
    console.error('Error:', error);
    
    // Sau:
    this.logger.log(`Processing job: ${job.id}`);
    this.logger.error(`Error: ${error.message}`, error.stack);
    
  • [ ] Áp dụng format log có context rõ ràng:
    this.logger.log(
      `[BICONOMY] action=SEND_GASLESS_NFT jobId=${job.id} status=success txHash=${txHash}`
    );
    
  • [ ] Đảm bảo private key KHÔNG xuất hiện trong log — thay bằng hash hoặc redact:
    // Không log:
    // this.logger.log(`privateKey=${data.privateKey}`);
    
    // Thay bằng:
    const keyHash = crypto.createHash('sha256').update(data.privateKey).digest('hex').slice(0, 8);
    this.logger.log(`[BICONOMY] keyRef=${keyHash}...`);
    
  • [ ] Trong onActive handler đã redact job data — kiểm tra và giữ nguyên pattern này
  • [ ] Thêm private readonly logger = new Logger(BiconomyService.name) vào BiconomyService nếu chưa có

Verification / Acceptance Criteria

  • [ ] grep -r "console.log\|console.error" src/biconomy/ trả về kết quả rỗng sau khi thay thế
  • [ ] Service khởi động không có lỗi TypeScript liên quan đến Logger
  • [ ] Log khi job thành công có format: [BICONOMY] action=... jobId=... status=success txHash=...
  • [ ] Log khi job thất bại có format: [BICONOMY] action=... jobId=... status=error message=... — không chứa private key
  • [ ] Unit test không bị broken sau thay đổi

Files to Modify

  • src/biconomy/biconomy.processor.ts
  • src/biconomy/biconomy.service.ts