pino-pretty 将特殊字符记录为文字

问题描述 投票:0回答:1

我使用 pino 进行日志记录,也使用 pino-pretty。 我遇到了 pino 打印特殊字符的问题。
例如:

key: "someKeyJson"
value: "\t\t\t\tsomeValueJson\nstring\t\tthat isnt being formatted"

当我想要的是类似的东西时\

key: "someKeyJson"
value: " someValueJson
string that isnt being formatted"

我的第一次尝试是严格替换正在记录的字符串中的值

value.replace(/\t/g, ' ').replace(/\n/g, '\n')
这对于选项卡来说效果很好,但是它仍然会导致日志看起来像这样

key: "someKeyJson"
value: "someValueJson\nstring that isnt being formatted"

我的其他替换尝试包括:

value.replace(/\t/g, ' ').replace(/\\n/g, '\n')

value.replace(/[\t]+/g, ' ').replace(/[\n]+/g, '\n')

所有这些都会产生相同的输出,这让我得出结论,可能需要配置,或者它与 ndjsonpino 本身有关 我的配置如下

const pinoLogger = pino({
    name: logger,
    level: LogLevel.DEBUG,
    transport: {
        target: 'pino-pretty',
        options: {
            destination: 1,
            colorize: true,
            translationTime: "SYS:yyyy-mm-dd'T'HH:MM:ss.l"
}

感谢任何帮助,因为我在 pino 或 pino-pretty 文档中没有看到太多内容,所以如果我错过了任何内容,也会有所帮助

node.js logging pinojs
1个回答
0
投票

所以我忘了提及我是如何进行日志记录的 我的应用程序中的日志示例如下

logger.info({key1, key2})

这将导致任何特殊字符被打印为文字字符表示,而不是实际的制表符或换行符。

我发现如果我将 json 格式化为字符串并打印该字符串,我就能得到我想要的效果。

例如:

formatLoggingString(logJson: any): string {
     let res = ''
     for (let key in logJson) {
          res += `${key}: ${logJson[key].replace(/[\t]{1}/g, ' ').replace(/\\n/g, '\n')}\n`
     }
     return res
}

这会导致日志看起来像我想要的那样,所以将 json 对象直接传递给 pino 记录器似乎是一个问题。
注意 问题似乎是传递一个对象而不是字符串,因为做类似的事情

logger.info({key1, key2: keyValue.replace(...replace logic)})

也行不通

© www.soinside.com 2019 - 2024. All rights reserved.