Skip to content

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');
Console

(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!');
Console

(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');
Console

(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);
Console

(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('可以在本地进一步排查这些错误');
Console

(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');
Console

(no output)

Released under the MIT License.