javascript 如何使pino库成为泛型库并在项目中的任何地方调用

jvidinwx  于 2022-12-28  发布在  Java
关注(0)|答案(3)|浏览(180)

我是node.js和JS的新手。我正在做一个基于node.js的测试程序。我只是选择了'pino'并像下面这样使用它:

const pino = require('pino');
const logger = pino({
    prettyPrint: true
  });

logger.info("Flow---XXXX");

当我运行npm run test | pino-pretty -c -t时,它返回以下响应

    • 输出:**

[1589538447177]信息(L-MAA-13i28828820上的00020):流量---XXXX
我有两个问题:
1.我在命令中设置了-t标志,我希望它将时间戳转换为用户理解的格式(如yyyy-mm-dd HH:mm:ss),但它仍然打印epoch格式,如上图所示。
1.我正在尝试将下面的代码行添加到项目中的所有JS文件中。是否可以将其命名为某个JS文件并将logger对象导出到其他js文件中?这就像不是在项目中的任何地方都调用下面的代码行,而是可以创建可重用的js文件并导出函数?

const pino = require('pino');
    const logger = pino({
        prettyPrint: true
      });

我不知道是否2请求是可能实现的,但它会是伟大的,如果我得到一些线索..
先谢了。
更新:
我通过使用模块解决了第一个问题。导出选项如下:

module.export.log = function(input)
    {

    logger.info(input);
    }

有人能帮我在日志中显示用户可读格式的时间吗?现在它打印纪元。我尝试了下面的代码,但仍然没有运气。

const logger = pino({
    prettyPrint: true,
    timestamp:`,"time":"${new Date(Date.now())}"`
  });

我可以看到pino库中有一个常量变量,名为timestamp,默认值被指定为epoch time。
我会张贴,如果我找到任何解决方案

yvfmudvl

yvfmudvl1#

记录有用的时间表示的正确方法是如下所示配置pino:

const logger = pino({
    name: __filename,
    level: process.env.LOG_LEVEL || 'debug',
    prettyPrint: {
        colorize: true,
        translateTime: 'SYS:standard',
        ignore: 'hostname,pid',
    }
});

上面的代码实际上在pino-logger包中,实现这个功能的设置是prettyPrint.translateTime

dl5txlt9

dl5txlt92#

我刚刚更改了pino.js文件中的以下详细信息,它现在返回用户可读格式的时间戳

const defaultOptions = {

timestamp:isoTime

}

const time = (timestamp instanceof Function)
    ? timestamp : (timestamp ? isoTime : nullTime)
  const timeSliceIndex = time().indexOf(':') + 1

time.js文件中,isoTime具有以下值

const isoTime = () => `,"time":"${new Date(Date.now()).toISOString()}"`

它返回了以下预期结果:

["2020-05-15T12:10:03.955Z"] INFO (00020 on L-MAA-13i28828820): Flow---XXXX
plicqrtu

plicqrtu3#

2023年更新

// logger.js
import pino from 'pino';

// Create a logging instance
export const logger = pino({
  enabled: process.env.LOG_ENABLED === 'true',
  formatters: {
    level: (label) => {
      return { level: label };
    },
  },
  level: process.env.LOG_LEVEL || 'info',
  name: process.env.LOGGER_NAME,
  redact: {
    paths: ['email', 'password', 'token'],
  },
  // https://github.com/pinojs/pino/issues/674
  timestamp: pino.stdTimeFunctions.isoTime,
});

我们需要一个ISO8601时间格式的时间戳,这里有描述,我们不希望像30这样的级别数字作为信息,而是我们希望标签,这就是为什么我添加了一个格式化程序

相关问题