Nest 附带一个默认的内部日志记录器实现,它在实例化过程中以及在一些不同的情况下使用,比如发生异常等等(例如系统记录)。这由 @nestjs/common 包中的 Logger 类实现。
- 完全禁用日志
- 指定日志系统详细水平(例如,展示错误,警告,调试信息等)
- 覆盖默认日志记录器的时间戳(例如使用 ISO8601 标准作为日期格式)
- 完全覆盖默认日志记录器
- 通过扩展自定义默认日志记录器
- 使用依赖注入来简化编写和测试你的应用
安装
npm install @nestjs/logger
基础自定义
要禁用日志,在app.module.ts
const app = await NestFactory.create(ApplicationModule, {
logger: false,
});
await app.listen(3000);
根据级别显示
// 层次类型
export type LogLevel = 'log' | 'error' | 'warn' | 'debug' | 'verbose';
// 创建app时使用配置 logger 层次
const app = await NestFactory.create(ApplicationModule, {
logger: ['error', 'warn'],
});
await app.listen(3000);
使用日志服务
import { Logger } from '@nestjs/common';
export class YourService {
private readonly logger = new Logger(YourService.name);
yourMethod(): void {
this.logger.log('Your log message');
}
}
配置日志模块
import { Module } from '@nestjs/common';
import { LoggerModule } from '@nestjs/logger';
@Module({
imports: [
LoggerModule.forRoot({
// 配置logger选项,例如格式化输出
format: 'dev', // 或 'json'
// 其他配置...
}),
],
// ...
})
export class AppModule {}
存储到logs文件夹
安装依赖
npm i winston nest-winston winston-daily-rotate-file -S
logging.service.ts
import { Injectable } from '@nestjs/common';
import * as winston from 'winston';
import * as DailyRotateFile from 'winston-daily-rotate-file';
@Injectable()
export class LoggingService {
private logger: winston.Logger;
constructor() {
this.logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new DailyRotateFile({
filename: 'application-%DATE%.log',
dirname: './logs',
datePattern: 'YYYY-MM-DD-HH',
zippedArchive: true,
maxSize: '10m',
maxFiles: '1d', // keep only logs of last 24 hours
}),
],
});
}
logInfo(message: string) {
this.logger.info(message);
}
logError(message: string) {
this.logger.error(message);
}
}
app.module.ts
import { LoggingService } from './logging.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService,LoggingService],
exports: [LoggingService],
})
export class AppModule {
constructor(private readonly loggingService: LoggingService) {
loggingService.logInfo('Application started');
}
}
logger打印
// cats.module.ts 引入logger
@Module({
imports: [],
controllers: [CatsController],
providers: [CatsService,LoggingService]
})
export class CatsModule {}
import { Controller, Get, Logger } from '@nestjs/common';
@Controller()
export class AppController {
constructor(private readonly logger: LoggingService) {}
@Get('logger')
index(): string {
this.logger.log('log 类型日志');
this.logger.warn('warn 类型日志');
this.logger.error('error 类型日志');
return 'Hello world'
}
}