Advanced Features
更深入的用法:深度命名空间、自定义中间件、监听器、动态配置。
深度嵌套命名空间
支持任意深度的命名空间嵌套,适合大型模块化应用。
import { Logger, LogLevel } from '@gvray/logger';
const app = new Logger({ namespace: 'app', level: LogLevel.DEBUG, timestamp: 'time' });
const http = app.child('http');
const auth = http.child('auth');
const jwt = auth.child('jwt');
const oauth = auth.child('oauth');
app.info('Root logger');
http.info('HTTP module loaded');
auth.debug('Auth middleware initialized');
jwt.debug('JWT token generated');
oauth.debug('OAuth2 flow started');
(no output)
自定义中间件
编写自己的日志处理逻辑。中间件接收 ctx(日志上下文)和 next(下一个中间件),按洋葱模型执行。
import { Logger, LogLevel } from '@gvray/logger';
const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
// 自定义中间件:给每条日志加一个自定义前缀
logger.use((ctx, next) => {
ctx.args = ['[CUSTOM]', ...ctx.args];
next();
});
// 条件中间件:只对 ERROR 及以上级别加告警标记
logger.use((ctx, next) => {
if (ctx.level >= LogLevel.ERROR) {
ctx.args = ['🚨 ALERT:', ...ctx.args];
}
next();
});
logger.info('Normal info message');
logger.error('This is an error!');
logger.fatal('Critical failure!');
(no output)
中间件链
多个中间件按注册顺序执行,可以组合出复杂的处理管道。
import { Logger, LogLevel, prefixMiddleware } from '@gvray/logger';
const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
// 多个中间件按顺序执行
logger.use(prefixMiddleware('[API]'));
logger.use((ctx, next) => {
ctx.args = [...ctx.args, '(processed)'];
next();
});
logger.info('Request received');
logger.debug('Processing data');
(no output)
监听器
监听所有日志事件,实现统计、收集等自定义处理。监听器接收完整的 LogContext,包含 level、args、namespace、timestamp、formattedMessage。
import { Logger, LogLevel } from '@gvray/logger';
const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const stats = { TRACE: 0, DEBUG: 0, INFO: 0, WARNING: 0, ERROR: 0, FATAL: 0 };
// 监听器:统计各级别日志数量
logger.addListener((ctx) => {
stats[ctx.levelName]++;
});
logger.trace('Trace 1');
logger.debug('Debug 1');
logger.debug('Debug 2');
logger.info('Info 1');
logger.info('Info 2');
logger.info('Info 3');
logger.warning('Warning 1');
logger.error('Error 1');
console.log('日志统计:', stats);
(no output)
错误收集
收集错误日志便于本地排查。监听器中可按 ctx.level 过滤。
import { Logger, LogLevel } from '@gvray/logger';
const logger = new Logger({ level: LogLevel.DEBUG, timestamp: 'time' });
const errors = [];
// 监听器:收集错误日志,便于本地排查
logger.addListener((ctx) => {
if (ctx.level >= LogLevel.ERROR) {
errors.push({
level: ctx.levelName,
message: ctx.formattedMessage,
timestamp: ctx.timestamp,
});
}
});
logger.info('Normal operation');
logger.error('Database connection failed');
logger.fatal('System crash');
console.log('收集的错误:', errors);
console.log('可以在本地进一步排查这些错误');
(no output)
动态配置
运行时修改日志行为——切换级别、时间戳、颜色等。所有 setter 方法都返回 this,支持链式调用。
import { Logger, LogLevel } from '@gvray/logger';
// 根据环境自动调整配置(这里模拟开发环境)
const isDev = true;
const logger = new Logger({
level: isDev ? LogLevel.DEBUG : LogLevel.WARNING,
timestamp: isDev ? 'time' : 'iso',
colors: isDev,
});
logger.debug('Development debug info');
logger.info('Application info');
logger.warning('Warning message');
// 运行时动态修改
console.log('切换到 WARNING 级别:');
logger.setLevel(LogLevel.WARNING);
logger.debug('This will NOT show');
logger.info('This will NOT show either');
logger.warning('Only warnings and above now');
(no output)