日志处理
日志
框架中提供两类基础的日志记录组件,一种是常规的日志记录工具,用于记录一般性的事件消息与异常错误等。另一种是请求日志,用于记录 http 请求中的相关业务,会自动绑定注入请求上下文的关键性信息。
nstarter-core 中可以被引用的日志组件包含:
import {
LogLevel,
Logger,
RequestLogger,
IRequestMeta,
IRequestMetaFormatter
} from 'nstarter-core';
nstarter-core 的日志组件基于 winston 实现,日志记录的相关输出渠道也采用 winston 的 transport 对象定义。
日志级别
在日志管理的过程中,需要通过不同级别来管理不同的日志信息。通过指定策略,可以将不同级别的日志输出到不同的记录渠道。为了简化日志管理,nstarter-core 中目前 只提供四个日志级别:
debug- 调试信息记录info- 常规信息记录warn- 警告信息,预期内可能出现的中断性异常,或警告信息error- 错误信息,预期外的异常
相关日志级别可以直接通过常量获取:
import { LogLevel } from 'nstarter-core';
let level = Logger.debug;
level = Logger.info;
level = Logger.warn;
level = Logger.error;
常规日志 (Logger)
框架中提供的日志组件,主要用于提供统一的入口,对产品业务中的日志/异常记录提供统一的入口。通过调用统一的 Logger 组件,统一处理各级别的日志记录行为。Logger 对应框架中对日志级别的规定,提供 debug, info, warn, error 四个级别的记录方法。
使用示例:
import { Logger } from 'nstarter-core';
Logger.debug('this is a bug');
// 所有日志记录方法都可以额外传入结构灵活的 meta 信息用于补充跟踪信息
Logger.info('Hello World', {
key: 'value'
});
Logger.warn(err, {});
// 记录方法均同时支持传入文本,或者 Error 对象
Logger.error('Ops!');
Logger.error(err, {});
框架中的日志组件仅仅只是提供集中的管理入口,并不直接管理具体对应的日志渠道。所以对外提供了日志记录渠道的注册方法,用于扩展记录渠道。调用示例如下:
// 控制台日志记录
const transport = new winston.transports.Console({
level: consoleLogConf.level,
stderrLevels: [LogLevel.error],
consoleWarnLevels: [LogLevel.warn, LogLevel.debug],
format: format.combine(...formats)
});
Logger.registerTransport(transport);
nstarter-core 包中本身并不包含任何默认的 transport 组件,但是通过 nstarter 启动的工程模板支持自动注册相关 transport 类型,包括:
- console - 控制台跟踪记录
- file - 文件记录
- graylog - 通过 GELF 协议集中收集
- sentry - 通过 sentry 记录事件(异常)管理