当前位置: 首页 > 知识库问答 >
问题:

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

席俊
2024-05-17

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

共有1个答案

陶博赡
2024-05-17

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

  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 版本等),以便进行更深入的分析。

 类似资料:
  • 我试图写一个日志文件使用slf4j与log4j.我可以看到控制台中的日志。但它没有写入日志文件 这是我的log4js属性文件 我已经包括了slf4j-api-1.7。5.jar,slf4j-log4j12-1.7。5和log4j-1.2。8.jar在我的类路径中。 我用下面的方法写日志。 任何帮助我都将不胜感激。谢谢

  • 在HDFS中写入日志文件的最佳方式是什么?我正在尝试配置Apache Flume,并尝试配置能够为我提供数据可靠性的源。我试图配置“exec”,后来也查看了“spooldir”,但flume.apache上的以下文档。org对我的意图表示怀疑- 执行来源: 最常请求的功能之一是像“tail -F file_name”这样的用例,其中应用程序写入磁盘上的日志文件,Flume 尾随文件,将每一行作为事

  • 问题内容: 好的,这是我设置所有内容的代码: 发生的是 error.log被创建 没有写任何东西 尽管未添加StreamHandler并将debug设置为false,但我仍然将所有内容都添加到STDOUT中(这可能是正确的,但仍然看起来很奇怪) 我是完全离开这里还是发生了什么事? 问题答案: 为什么不这样做呢? 如果现在启动应用程序,你将看到error.log包含: 有关更多信息,请访问http:

  • 我正在Servlet 3.0和Tomcat中做一个简单的演示项目 我接受邮递员的JSON请求并提供JSON响应。 现在我也想在我的项目中做日志记录。 所以我使用log4j2 罐子使用:- log4j-1.2.12.jar, jackson-databind-2.6.3.jar, jackson-core-2.6.3.jar Servlet代码:- 我的项目目录:- 我的log4j。xml 当我在e

  • 我创建了以下groovy脚本,以展示如何使用简单的注释将日志字段注入我们的类 当我运行groovy脚本时,我得到以下结果(在GROOVY CONSOLE上) 请告知我们如何将结果打印到WIN机器中的日志文件中,以及需要向groovy脚本中添加什么才能启用它? 例如: 日志文件 C: \程序文件\日志\我的。非常棒。日志 (应包含结果:)

  • 我决定使用slf4j而不是Java自己的日志记录。我已经成功地使用SLF4J登录到控制台。但我不知道如何将其写入日志文件。日志文件将帮助我们收集运行时可能出现的错误。 我通过这样做来实现slf4j, 私有静态最终org.slf4j.LOGGER LOGGER=org.slf4j.loggerfactory.getlogger(class1.class); PropertyConfigurator.