日志(v2)
提示
本文档为 @midwayjs/logger
v2.0 版本的文档。
Midway 为不同场景提供了一套统一的日志接入方式。通过 @midwayjs/logger
包导出的方法,可以方便的接入不同场景的日志系统。
Midway 的日志系统基于社区的 winston,是现在社区非常受欢迎的日志库。
实现的功能有:
- 日志分级
- 按大小和时间自动切割
- 自定义输出格式
- 统一错误日志
日志路径和文件
Midway 会在日志根目录创建一些默认的文件。
midway-core.log
框架、组件打印信息的日志,对应coreLogger
。midway-app.log
应用打印信息的日志,对应appLogger
common-error.log
所有错误的日志(所有 Midway 创建出来的日志,都会将错误重复打印一份到该文件中)
本地开发和服务器部署时的 日志路径 和 日志等级 不同,具体请参考 配置日志根目录 和 框架的默认等级。
默认日志对象
Midway 默认在框架提供了三种不同的日志,对应三种不同的行为。
日志 | 释义 | 描述 | 常见使用 |
---|---|---|---|
coreLogger | 框架,组件层面的日志 | 默认会输出控制台日志和文本日志 midway-core.log ,并且默认会将错误日志发送到 common-error.log 。 | 框架和组件的错误,一般会打印到其中。 |
appLogger | 业务层面的日志 | 默认会输出控制台日志和文本日志 midway-app.log ,并且默认会将错误日志发送到 common-error.log 。 | 业务使用的日志,一般业务日志会打印到其中。 |
上下文日志(复用 appLogger 的配置) | 请求链路的日志 | 默认使用 appLogger 进行输出,除了会将错误日志发送到 common-error.log 之外,还增加了上下文信息。 | 修改日志输出的标记(Label),不同的框架有不同的请求标记,比如 HTTP 下就会输出路由信息。 |
使用日志
Midway 的常用日志使用方法。
上下文日志
上下文日志是关联框架上下文对象(Context) 的日志。
我们可以通过 获取到 ctx 对象 后,使用 ctx.logger
对象进行日志打印输出。
比如:
ctx.logger.info("hello world");
ctx.logger.debug('debug info');
ctx.logger.warn('WARNNING!!!!');
// 错误日志记录,直接会将错误日志完整堆栈信息记录下来,并且输出到 errorLog 中
// 为了保证异常可追踪,必须保证所有抛出的异常都是 Error 类型,因为只有 Error 类型才会带上堆栈信息,定位到问题。
ctx.logger.error(new Error('custom error'));
在执行后,我们能在两个地方看到日志输出:
- 控制台看到输出。
- 日志目录的 midway-app.log 文件中
输出结果:
2021-07-22 14:50:59,388 INFO 7739 [-/::ffff:127.0.0.1/-/0ms GET /api/get_user] hello world
在注入的形式中,我们也可以直接使用 @Inject() logger
的形式来注入 ctx.logger
,和直接调用 ctx.logger
等价。
比如:
import { Get, Inject, Controller, Provide } from '@midwayjs/core';
import { ILogger } from '@midwayjs/logger';
@Controller()
export class HelloController {
@Inject()
logger: ILogger;
@Inject()
ctx;
@Get("/")
async hello(){
// ...
// this.logger === ctx.logger
}
}