You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KeystoneJS项目设置Pino日志级别报错log_1.default.level is not a function

问题排查与解决思路

这个报错的核心原因是你使用的Pino v6+版本已经移除了level()方法——在Pino 5及更早版本中,logger.level()是用来动态调整日志级别的函数,但从v6开始,这个API被简化为直接修改实例的level属性,或者在初始化时配置级别。

解决方案1:初始化时根据环境配置日志级别(推荐)

这是Pino官方推荐的方式,因为初始化时设置级别更高效,也符合环境区分的最佳实践。修改你的util/log.js:

import pino from 'pino';

// 按环境定义日志级别,生产环境可按需改为'warn'或'error'
const logLevel = process.env.NODE_ENV === 'production' ? 'error' : 'info';

const logger = pino({
  // 生产环境关闭prettyPrint以提升性能,仅开发环境保留彩色输出
  prettyPrint: process.env.NODE_ENV !== 'production' ? { colorize: true } : false,
  level: logLevel // 直接在初始化时指定级别
});

export default logger;

解决方案2:运行时动态调整级别(仅特殊场景使用)

如果确实需要在代码执行过程中动态修改日志级别,直接给log.level赋值即可,替代原来的log.level()函数调用:

import log from './util/log';

if (process.env.NODE_ENV === 'development') {
  log.level = 'error'; // 直接赋值,而非调用函数
}

注意:如果TypeScript报类型错误,确保你已经安装了@types/pino包(npm install @types/pino --save-dev),它会提供正确的类型定义。

验证修改是否生效

你可以通过以下方式确认级别设置成功:

  • 打印console.log(log.level),应该输出你设置的级别字符串(比如'error')
  • 测试不同级别的日志:设置为'error'后,log.info('测试信息')不会输出,而log.error('测试错误')会正常输出

额外优化建议

生产环境下建议完全关闭prettyPrint,因为它会增加CPU开销,Pino默认的JSON格式日志更适合日志收集系统(如ELK、Datadog等)解析处理。

内容的提问来源于stack exchange,提问作者Cerulean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:47:46