日志模块 pino
-
安装:$
npm i nestjs-pino -
注册:
import { LoggerModule, Logger } from 'nestjs-pino' @Module({ controllers: [AppController], imports: [LoggerModule.forRoot()] // 注意这里 }) -
在控制器中测试使用
import { Logger } from 'nestjs-pino' @Controller('user') export class UserController { private logger = Logger constructor() { this.logger.log('init') // 类似这样,在需要的地方调用 } }- 这样写,在访问这个控制器的时候,会打印两次,因为不需要手动调用,所以
- 需要删除这个
this.logger.log('init')调用,因为这个是没有必要的 - 所以 pino 是一个比较适合懒人的库
- 它会默认打印日志,但是目前看来,日志输出不友好(不好阅读)
友好化 pino 方案
-
$
npm i pino-pretty pino-roll -
在 user.module.ts 中
import { LoggerModule } from 'nestjs-pino' const isDev = process.env.NODE_ENV === 'development' @Module({ imports: [LoggerModule.forRoot({ pinoHttp: { transport: isDev ? { target: 'pino-pretty', level: 'info', options: { colorize: true } } : { target: 'pino-roll', level: 'info', options: { file: path.join('log', 'log.txt'), // 文件名称可以用时间 frequency: 'daily', // hourly size: '10m', // 只要超过这个,就会多生成一个文件 mkdir: true } } } })] }) -
这里开发环境和生产环境用的不同的pino插件
-
pino是一个开箱即用,稍稍配置就可以使用的日志插件
-
注意,还有一个 targets 的用法,比较好,可以参考:
pinoHttp: { transport: { targets: [ { level: 'info', target: 'pino-pretty', options: { colorize: true } }, { target: 'pino-roll', level: 'info', options: { file: path.join('log', 'log.txt'), // 文件名称可以用时间 frequency: 'daily', // hourly size: '10m', // 只要超过这个,就会多生成一个文件 0.1k mkdir: true } } ] } } -
或
pinoHttp: { transport: { targets: [ isDev ? { level: 'info', target: 'pino-pretty', options: { colorize: true } }: { target: 'pino-roll', level: 'info', options: { file: path.join('log'
171



被折叠的 条评论
为什么被折叠?



