nest框架中使用pino,无法将日志写入到本地文件?

nest框架中使用pino,无法将日志写入到本地文件

checkOrCreate(config.log);
    const streams = [
      {
        stream: fs.createWriteStream(this.logPath, {
          flags: 'a+',
        }),
      },
      { stream: process.stdout },
    ];
    this.logger = pino({}, pino.multistream(streams));

这里用的pino,checkOrCreate回确保日志文件已创建,但是后续日志打印无法写入到文件中

LoggerModule.forRoot({
      pinoHttp: {
        transport: {
          targets: [
            {
              target: 'pino-pretty',
              options: {
                colorize: true,
              },
            },
            {
              target: 'pino-roll',
              options: {
                level: 'info',
                file: join('/var/log/', 'blog-event.log'),
                frequency: 'daily',
                size: '10m',
                mkdir: true,
              },
            },
          ],
        },
      },

这是另外一种尝试,使用的是import { LoggerModule } from 'nestjs-pino';
这里pino-pretty可以在控制台中输出打印,但是pino-roll依然无法写入文件

已确定写入权限是给了的
image.png

阅读 560
avatarAI BotBETA

无法将日志写入本地文件的问题可能由多个原因引起。由于你提供了代码和描述,以下是一些可能的原因以及如何解决它们:

  1. 路径问题:确保提供的日志路径 /var/log/ 是正确的,并且应用程序有足够的权限在该目录下创建和写入文件。
  2. 文件权限:尽管你提到已经给了写入权限,但请再次检查并确保运行 Nest.js 应用程序的用户有权访问和写入 /var/log/ 目录。
  3. 文件句柄问题:如果 fs.createWriteStream 已经被其他地方占用或打开,则可能导致无法写入。
  4. 日志级别:请确保你的日志级别(例如 info)与你在代码中打印的日志级别相匹配或更低。如果日志级别设置得太高(如 error),那么 info 级别的日志就不会被记录。
  5. 配置问题:确保你的 Nest.js 配置是正确的,并且与 pino 和相关的模块兼容。
  6. 模块问题:如果你使用的是第三方模块(如 nestjs-pino),请确保它是最新版本,并且没有已知的 bug。
  7. 代码错误:在你的代码中,你首先创建了一个自定义的流,然后你又在 LoggerModule.forRoot 中配置了另一个流。这可能会导致冲突或混淆。

为了解决这个问题,你可以尝试以下步骤:

  • 简化配置:首先,尝试只使用一种日志配置方法,看看是否可以正常工作。
  • 检查错误:查看应用程序是否有任何错误输出,这可能会提供关于问题的线索。
  • 手动测试:尝试手动使用 fs.createWriteStream 写入一个文件,看看是否可以成功。
  • 查看文档和社区:查看 Nest.js 和 pino 的官方文档,以及相关的社区论坛和 Stack Overflow 问题,看看是否有其他人遇到了类似的问题。

如果上述步骤都不能解决问题,你可能需要提供更多的信息,如完整的错误消息、更详细的代码片段以及你的运行环境(操作系统、Node.js 版本等),以便进行更深入的分析。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏