Nodejs forever 日志输出的问题

Nodejs forever 日志输出的问题

 forever start -o logs/forever_out.log -e logs/forever_err.log -a app.js

执行上面的代码,会提示如下信息: info: Forever processing file: app.js

同时发现在logs文件夹下面生成两个.log文件,但是访问网站,两个log文件全部为空,没有任何写入,已经对文件权限设为全部可以读写。

用户目录中的.forever/ 下面有生成所有的访问log文件。

问题:如何能让第一行代码,按照所写的方式生成log日志呢?


4 回复

要解决 forever 命令在指定的日志文件中不生成日志的问题,我们需要确保 Node.js 应用程序正确地使用了标准输出(stdout)和标准错误输出(stderr)。默认情况下,forever 会将这些输出重定向到指定的日志文件中。

以下是一些步骤和建议来帮助你解决问题:

1. 确保 Node.js 应用程序正确输出日志

首先,确保你的应用程序在运行时正确地向 console.log()console.error() 输出日志。例如:

// app.js
console.log('This is an info message.');
console.error('This is an error message.');

2. 使用 forever 正确配置日志文件

你可以使用 forever-o-e 参数来指定标准输出和标准错误输出的文件路径。确保路径是正确的,并且具有写入权限。

forever start -o logs/forever_out.log -e logs/forever_err.log -a app.js
  • -o 指定标准输出日志文件。
  • -e 指定标准错误输出日志文件。
  • -a 表示追加模式,而不是覆盖现有日志文件。

3. 检查文件权限

确保 logs 文件夹及其子文件具有适当的写入权限。你可以通过以下命令设置权限:

chmod -R 777 logs/

4. 检查应用程序是否正常运行

确保你的应用程序能够正常启动并运行。如果应用程序崩溃或未正确启动,forever 可能不会记录任何日志。

示例代码

假设你的 app.js 如下:

// app.js
const http = require('http');

http.createServer((req, res) => {
    console.log('Request received');
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(3000);

console.log('Server running at http://localhost:3000/');

5. 启动应用程序

使用 forever 启动应用程序:

forever start -o logs/forever_out.log -e logs/forever_err.log -a app.js

6. 验证日志文件

访问 http://localhost:3000/ 并刷新页面几次,然后检查 logs/forever_out.loglogs/forever_err.log 文件,你应该能看到输出的日志信息。

通过以上步骤,你应该能够解决 forever 不生成日志的问题。如果仍然有问题,请检查是否有其他配置或环境因素影响了日志的生成。


首先要了解三个参数的作用
-l LOGFILE Logs the forever output to LOGFILE -o OUTFILE Logs stdout from child script to OUTFILE(脚本运行时候的正常输出) -e ERRFILE Logs stderr from child script to ERRFILE(脚本运行时候的异常输出)

还是没理解。。您的意思是必须有-l 这个参数,-o 和-e才会生效?

目前使用Express的自带日志输出功能,forever 作为启动管理工具。

根据你的描述,使用 forever 启动 Node.js 应用程序时,日志文件没有正确写入内容。这通常与权限、路径或应用程序本身的日志配置有关。下面是一些可能的解决方案:

1. 确认路径和权限

确保 logs 文件夹存在,并且 Node.js 进程有足够的权限写入该文件夹。你可以手动创建 logs 文件夹并设置正确的权限。

mkdir -p logs
chmod 777 logs

2. 使用绝对路径

有时候相对路径可能会导致问题,尝试使用绝对路径来确保 forever 能够找到指定的日志文件。

forever start -o /absolute/path/to/logs/forever_out.log -e /absolute/path/to/logs/forever_err.log -a app.js

3. 检查应用程序的日志配置

确保你的 Node.js 应用程序本身没有错误地配置日志输出。如果应用程序内部使用了其他方式记录日志(例如通过 console.log()),你需要确保这些日志被正确地输出到文件中。

示例代码

如果你的应用程序内部需要输出日志,可以使用 winstonmorgan 等日志库进行更细粒度的控制。

// 引入winston
const winston = require('winston');

// 创建一个logger实例
const logger = winston.createLogger({
  transports: [
    new winston.transports.File({ filename: 'logs/forever_out.log' })
  ]
});

// 输出日志
logger.info('This is an info message');

4. 使用 forever-service

如果你希望更灵活地管理应用进程,可以考虑使用 forever-service 来安装和管理服务。它提供了更好的控制和日志管理功能。

5. 检查 forever 版本

有时 forever 的某些版本可能存在已知的 bug。建议检查 forever 的版本,必要时升级到最新版本。

npm install -g forever

如果上述方法都无效,建议查看 forever 的文档或社区支持,看看是否有其他用户遇到类似的问题并找到了解决办法。

回到顶部