- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我了解,Pino (v 7.5.1) 默认执行同步日志记录。来自文档
In Pino's standard mode of operation log messages are directly written to the output stream as the messages are generated with a blocking operation.
我正在像这样使用 pino.multistreams
const pino = require('pino')
const pretty = require('pino-pretty')
const logdir = '/Users/punkish/Projects/z/logs'
const streams = [
{stream: fs.createWriteStream(`${logdir}/info.log`, {flags: 'a'})},
{stream: pretty()},
{level: 'error', stream: fs.createWriteStream(`${logdir}/error.log`, {flags: 'a'})},
{level: 'debug', stream: fs.createWriteStream(`${logdir}/debug.log`, {flags: 'a'})},
{level: 'fatal', stream: fs.createWriteStream(`${logdir}/fatal.log`, {flags: 'a'})}
]
奇怪的是,Pino 的行为是异步的。我有一个 curl
操作乱序输出(在使用 log.info
的早期事件之前)
log.info('1')
.. code to do 1 something
log.info('2')
.. code to do 2 something
log.info('3')
.. code to do 3 something
const execSync = require('child_process').execSync
execSync(curl --silent --output ${local} '${remote}')
我的控制台
输出是
1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 39.5M 100 39.5M 0 0 108M 0 --:--:-- --:--:-- --:--:-- 113M
2
3
这有点烦人和令人困惑。也许这不是 Pino 的错,也许是 curl
导致了问题。但是,如果我用 console.log
替换 pino logging,那么顺序就是预期的。所以问题似乎出在 Pino 的异步行为上。我怎样才能回到同步日志记录?
最佳答案
诀窍是调用 pino.destination({...})
来创建 SonicBoom 输出流:fs.createWriteStream
的 pino 特定替代方案。 SonicBoom
选项有一个 bool 属性 sync
。您还需要 pretty({...})
中的 sync
选项。
const pino = require('pino')
const pretty = require('pino-pretty')
const logdir = '/Users/punkish/Projects/z/logs'
const createSonicBoom = (dest) =>
pino.destination({dest: dest, append: true, sync: true})
const streams = [
{stream: createSonicBoom(`${logdir}/info.log`)},
{stream: pretty({
colorize: true,
sync: true,
})},
{level: 'error', stream: createSonicBoom(`${logdir}/error.log`)},
{level: 'debug', stream: createSonicBoom(`${logdir}/debug.log`)},
{level: 'fatal', stream: createSonicBoom(`${logdir}/fatal.log`)}
]
测试:
const log = pino({ level: 'info' }, pino.multistream(streams))
console.log('Before-Fatal')
log.fatal('Fatal')
log.error('Error')
log.warn('Warn')
console.log('After-Warn, Before-Info')
log.info('Info')
console.log('After-Info')
输出:
Before-Fatal[1234567890123] FATAL (1234567 on host): Fatal[1234567890127] ERROR (1234567 on host): Error[1234567890127] WARN (1234567 on host): WarnAfter-Warn, Before-Info[1234567890128] INFO (1234567 on host): InfoAfter-Info
关于node.js - 使用带同步日志记录的 pino multistream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70265186/
我有使用 express-pino-logger 的现有代码.这对我们的 ELK 堆栈设置来说很棒,但在本地运行时非常不幸(记录缩小的 JSON)。 我想使用 pino-pretty使本地使用不再痛苦
当我构建应用程序时,我使用的是 adonis js 项目版本 5 和 Node js 版本 14 以及 docker 版本 20 一切正常但是当我创建 docker 图像并运行容器 docker 时我
我编写了一个小的错误处理函数,它在 AXIOS 请求之后调用,如下所示: try { ... } catch (error) { handleAxiosError(error); } 功能如
我正在使用 express-pino-logger 作为日志系统。一切正常,但它正在记录大量不需要的数据所有请求数据。那么我如何在记录时限制特定的字段。 var expressPino = requi
据我了解,Pino (v 7.5.1) 默认执行同步日志记录。来自文档 In Pino's standard mode of operation log messages are directly w
我正在尝试使用 pino 登录到我的 Node 应用程序服务器,并且确实有一些大型日志即将到来,因此每天轮换文件对于之后阅读日志会更有用。 我可以使用 morgan 做到这一点,但使用 pino 我找
我需要将文件名添加到 pino-pretty 行输出中, 现在我正在使用: const pino = require('pino'); const logger = pino({ pretty
我有一个有两个主要模块的应用程序。一种是 ui 组件 另一个是 服务组件 . ui-component 使用winston logger,service-component 使用pino logger
我正在尝试将 Pino 与 Sequelize 的 options.logging 一起使用: A function that gets executed every time Sequelize w
我已经在 KeystoneJS/NodeJS 项目中使用 Pino 设置了一个日志实用程序模块。它工作正常,但我想在投入生产时限制日志级别。 实用程序文件 util/log.js 已设置 import
我正在分享这个,因为我努力让 pino 记录器写入 STDOUT 和日志文件: const dest = new stream.PassThrough(); dest.pipe(process.std
我是一名优秀的程序员,十分优秀!