Fastify中无法修改Pino默认{ level: info }配置的问题求助
解决Fastify中Pino日志Level不生效的问题
你遇到的问题根源在于:Pino的全局日志级别默认是info,这个级别会优先过滤所有日志;你在transport targets里设置的level只是传输层的二次过滤规则,无法覆盖全局级别。要解决这个问题,不需要使用disableRequestLogging,只需在Pino配置的根层级添加level字段即可。
修改配置步骤
修改pino/config/dev.js,在导出的配置对象中添加根级的level:
const targets = [ { target: 'pino-pretty', options: { name: 'dev-terminal', level: 'error', // 终端仅输出error及以上级别日志 colorize: true, levelFirst: true, include: 'level,time,', translateTime: 'yyyy-mm-dd HH:MM:ss Z', }, }, { target: 'pino/file', options: { name: 'dev-local-file', level: 'fatal', // 文件仅输出fatal级别日志 destination: './pino/logs/dev.log', mkdir: true, }, }, ] export default { level: 'error', // 全局日志级别设为error,过滤掉info及以下的日志 transport: { targets, }, }
原理说明
- 全局级别:根级的
level是Pino实例的全局过滤规则,只有级别大于等于该值的日志才会被生成,进入后续的传输流程。这里设为error后,info级别的日志(比如Fastify默认的请求日志)会被直接过滤,不会传到transport层。 - 传输层级别:每个target里的
level是在全局过滤之后的二次过滤,比如文件传输设为fatal,会在全局输出的error、fatal日志中,仅保留fatal级别写入文件。
如果需要保留某些info级别的自定义日志,只需将全局level设为info,传输层的level会自动过滤掉对应级别以下的日志,这样既保留自定义info日志,又不会输出Fastify默认的info级请求日志到终端或文件。
内容的提问来源于stack exchange,提问作者Georgii Galechyan
相关产品推荐
相关产品推荐

