nestjs从零到一,快速上手(四):日志的使用nestjs-pino和winston

1. 内置日志模块的使用

import {  Logger} from '@nestjs/common';

@Controller('user')
export class UserController {
  private logger = new Logger('UserController');
  constructor(private readonly userService: UserService) {}

  @Get()
  getHello() {
    this.logger.log('UserController getHello');
    return this.userService.getHello();
  }
}

2. nestjs-pino日志模块的使用网址

1.安装 

pnpm i nestjs-pino pino-http

main.ts 文件

import { Logger } from 'nestjs-pino';

const app = await NestFactory.create(AppModule, { bufferLogs: true });
app.useLogger(app.get(Logger));

app.module.ts 文件

import { LoggerModule } from 'nestjs-pino';

@Module({
  imports: [LoggerModule.forRoot()],
})
class AppModule {}

内置logger的使用 

// NestJS standard built-in logger.
// Logs will be produced by pino internally
import { Logger } from '@nestjs/common';

export class MyService {
  private readonly logger = new Logger(MyService.name);
  foo() {
    // All logger methods have args format the same as pino, but pino methods
    // `trace` and `info` are mapped to `verbose` and `log` to satisfy
    // `LoggerService` interface of NestJS:
    this.logger.verbose({ foo: 'bar' }, 'baz %s', 'qux');
    this.logger.debug('foo %s %o', 'bar', { baz: 'qux' });
    this.logger.log('foo');
  }
}

3. 日志格式化插件 pino-pretty 和线上日志滚动记录插件 pino-roll

pnpm install pino-pretty pino-roll

app.module.ts文件在  imports: []里面配置 pino-pretty和pino-roll

import { LoggerModule } from 'nestjs-pino';
import { join } from 'path';


  LoggerModule.forRoot({
      pinoHttp: {
        transport: {
          targets: [
            process.env.NODE_ENV === 'development'
              ? {
                  target: 'pino-pretty',
                  options: {
                    colorize: true,
                    ignore: 'pid,hostname',
                  },
                }
              : {
                  target: 'pino-roll',
                  options: {
                    // level: 'info',
                    file: join('logs', 'log.txt'),
                    frequency: 'daily',
                    size: '10m',
                    mkdir: true,
                  },
                },
          ],
        },
      },
    }),

ps:使用process.env.NODE_ENV要安装插件 cross-env 笔者使用版本7.0.3

package.json文件配置运行脚本命令 "start": "cross-env NODE_ENV=development nest start --watch"

 4.nest-winston的使用(除了pino日志库,也可以使用nest-winston、winston)

pnpm i nest-winston winston

日志滚动存放插件库 winston-daily-rotate-file 

pnpm i winston-daily-rotate-file

main.ts文件配置 

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
// import { Logger } from 'nestjs-pino';
import { createLogger } from 'winston';
import 'winston-daily-rotate-file';
import * as winston from 'winston'; // 引入winston,必须这么写
import { WinstonModule, utilities } from 'nest-winston';
async function bootstrap() {
  // app.useLogger(app.get(Logger));
  const instance = createLogger({
    transports: [
      new winston.transports.Console({
        format: winston.format.combine(
          winston.format.timestamp(),
          utilities.format.nestLike(),
        ),
      }),
      new winston.transports.DailyRotateFile({
        dirname: 'logs',
        filename: 'application-%DATE%.log',
        datePattern: 'YYYY-MM-DD-HH',
        zippedArchive: true,
        maxSize: '20m',
        maxFiles: '14d',
      }),
    ],
  });
  const app = await NestFactory.create(AppModule, {
    logger: WinstonModule.createLogger(instance),
  });
  // app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));
  await app.listen(3000);
  if (module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }
}
bootstrap();

app.module.ts文件配置

import { Global, Logger, Module } from '@nestjs/common';
@Global() //全局导入方法
@Module({
  imports: [
  controllers: [],
  providers: [Logger],
  exports: [Logger],
})

在代码中使用例如:user.controller.ts文件

import { Controller,  Logger } from '@nestjs/common';
import { UserService } from './user.service';
export class UserController {
  // private logger = new Logger('UserController');

  constructor(
    private readonly userService: UserService,
    private readonly logger: Logger,
  ) {
    // this.logger.log('UserController getHello....');
  }

  @Get()
  getHello() {
    this.logger.log('UserController getHello....');
    return this.userService.getHello();
  }

}

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值