NestJS项目日志打印方法
方法一:(推荐)建立一个基于 Winston ( Nest官方推荐,或其他类似日志工具 ) 的 Logger 公用基础类。
基础类的作用主要是集中配置,比如日志的格式化、最大长度、日志文件输出位置、命名和定时清理等。
然后通过继承或者实例化都行,总之在需要打印的地方,调用其打印方法,实现打印动作。
方法二: Nestjs自带的打印方法:
import Logger from @nestjs/common // 引入
new Logger('contextName').log('message') // 使用
方法三:console.log:最原始,不够高级优雅
系统日志配置入口
打印 Nest 系统日志:需要 implement LoggerService 接口 ( 配置入口 main.js )
import Logger from @nestjs/common
const app = await NestFactory.create<NestExpressApplication>(ApplicationModule, {
logger: new Logger() // implement of interface LoggerService
})
打印 TypeORM 日志:需要 implement ( typeorm 的 ) Logger 接口。
import { Logger } from 'typeorm'
export class OrmLogger extends BasicLogger implements Logger
TypeOrmModule.forRoot({
logger: new OrmLogger()
})
自定义处日志打印
一个通过继承基于Winston的基础类实现 自定义 日志打印的例子。
export class GrpcService extends BasicLogger {
constructor() {
super('grpc') // 这里是设置日志的 context 名称
}
async call<T = any>() {
// 准备好相关信息 在调用grpc的时候,进行日志打印
const print = this.logger["info"] // this.logger 是继承自 BasicLogger 的打印动作方法
const message = `${this.requestId} ${code} "${msg}" ${bytes}bytes ${cost}ms`
print(message, { label: cmd, autoLabelCase: false, extra }) // 打印
}
}