Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。在Nest中集成Winston可以让我们更方便地记录和管理日志。在上章我们学习了Node中使用Winston框架,本章我们将学习在Nest集成日志框架Winston
首先我们创建一下Nest项目:
nest new nest-winston
import { LoggerService } from '@nestjs/common';
export class MyLogger implements LoggerService {
log(message: string, context: string) {
console.log(`log---[${context}]---`, message)
}
error(message: string, context: string) {
console.log(`error---[${context}]---`, message)
}
warn(message: string, context: string) {
console.log(`warn---[${context}]---`, message)
}
}
接着在 main.ts 里引入
app.useLogger(new MyLogger);
启动服务:
npm run start:dev
可以看到 logger 换成我们自己自定义的了
修改 app.controller.ts:
import {
Controller, Get, Logger } from '@nestjs/common';
import {
AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {
}
private logger = new Logger();
@Get()
getHello(): string {
this.logger.log('Hello World!', AppController.name)
return this.appService.getHello();
}
}
访问游览器 http://localhost:3000/
可以看到控制台打印了自定义的 logger 的自定义
安装 winston
npm install --save winston
// 或
pnpm install --save winston
修改MyLogger:
import {
LoggerService } from '@nestjs/common';
import {
createLogger, Logger ,format, transports} from 'winston';
export class MyLogger implements LoggerService {
private logger:Logger;
constructor(){
this.logger=createLogger({
level:'debug',
format:format.combine(
format.timestamp(),
format.json()
),
transports:[
new transports.Console()
]
})
}
log(message: string, context: string) {
this.logger.log('info', `[${
context}] ${
message}`);
}
error(message: string, context: string) {
this.logger.log('error', `[${
context}] ${
message}`);
}
warn(message: string, context: string) {
this.logger.log('warn', `[${
context}] ${
message}`