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);
(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',
});
(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);
(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,
});
(no output)