Skip to content

Real-World Examples ​

模拟真实项目中的日志使用场景。这些示例展示如何在生产环境中使用 @gvray/logger。

API 请求日志 ​

记录 API 请求的完整生命周期:请求参数、响应时间、状态码。使用子 Logger 区分模块,中间件添加请求 ID。

异步输出

这些示例使用了 setTimeout 模拟异步请求。输出会在延迟后出现在 Console 面板中。

import { Logger, LogLevel, prefixMiddleware } from '@gvray/logger';

const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const api = logger.child('api');

let requestId = 1000;
// 给每条 API 日志加请求 ID
api.use((ctx, next) => {
  ctx.args = [`[REQ-${requestId++}]`, ...ctx.args];
  next();
});

api.info('GET /users', { params: { page: 1, limit: 10 } });

// 模拟异步请求
const start = performance.now();
setTimeout(() => {
  const duration = Math.round(performance.now() - start);
  api.info('GET /users completed', { status: 200, duration: `${duration}ms`, records: 42 });
}, 80);
Console

(no output)

错误处理与调试 ​

捕获和记录应用错误,包括堆栈信息、上下文数据。配合 errorStackMiddleware 自动展开错误堆栈。

import { Logger, LogLevel, errorStackMiddleware } from '@gvray/logger';

const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const errorLogger = logger.child('error');
errorLogger.use(errorStackMiddleware());

try {
  // 模拟一个会抛错的操作
  const user = null;
  // @ts-ignore - intentionally accessing null to trigger an error
  const name = user.name;
} catch (err) {
  errorLogger.error('Runtime error in component', err, {
    component: 'UserProfile',
    props: { userId: null },
  });
}

errorLogger.warning('Form validation error', new Error('Email is required'), {
  field: 'email',
});

errorLogger.fatal('Critical system error', new Error('Database connection lost'), {
  service: 'database',
  uptime: '2h 34m',
});
Console

(no output)

性能监控 ​

记录关键操作的性能指标。超过阈值(如 500ms)时自动提升到 WARNING 级别。

import { Logger, LogLevel } from '@gvray/logger';

const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const perf = logger.child('performance');

function measure(label, delay) {
  perf.info(`${label} starting...`);
  const start = performance.now();
  setTimeout(() => {
    const duration = performance.now() - start;
    const logLevel = duration > 500 ? 'warning' : 'info';
    perf[logLevel](`${label} completed`, {
      duration: `${duration.toFixed(2)}ms`,
      threshold: '500ms',
      status: duration > 500 ? 'SLOW' : 'OK',
    });
  }, delay);
}

measure('fast operation', 30);
measure('normal operation', 250);
measure('slow operation', 600);
Console

(no output)

安全审计 ​

记录安全相关事件:登录尝试、权限检查、可疑活动。配合 redactMiddleware 自动脱敏敏感字段。

import { Logger, LogLevel, redactMiddleware } from '@gvray/logger';

const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const audit = logger.child('audit');

// 自动脱敏 password / token / secret / key 字段
audit.use(
  redactMiddleware([/password/i, /token/i, /secret/i, /key/i]),
);

audit.info('Login successful', {
  username: 'john.doe',
  ip: '192.168.1.100',
  mfa: true,
});

audit.warning('Login failed', {
  username: 'admin',
  password: 'secret123', // 会被脱敏
  ip: '192.168.1.100',
  reason: 'invalid_credentials',
  attempts: 3,
});

audit.error('Suspicious activity detected', {
  user: 'unknown',
  ip: '123.45.67.89',
  action: 'multiple_failed_logins',
  count: 10,
});
Console

(no output)

Released under the MIT License.