Nodejs如何让业务代码中的日志记录在pm2中?

Nodejs如何让业务代码中的日志记录在pm2中?

项目原来是使用log4js来记录日志的,不过在使用pm2进行管理时,发现pm2与log4js不兼容~ 如何解决这种不兼容?

或者,如何让业务代码中的日志记录发送给pm2?

4 回复

要在Node.js项目中通过PM2管理业务代码的日志记录,我们可以采用以下几种方法。这里主要介绍如何将业务代码中的日志集成到PM2的默认日志系统中。

方法一:使用PM2内置的日志功能

PM2自带了强大的日志管理功能,可以直接捕获应用的标准输出(stdout)和标准错误(stderr)。你可以直接在业务代码中使用console.log()console.error()等方法来记录日志。这些日志会被PM2自动捕获并存储在指定的目录下。

示例代码:

// 在业务代码中
console.log("This is a log message.");
console.error("This is an error message.");

// 运行时确保PM2正在运行你的应用
pm2 start app.js

这样,你就可以通过PM2命令查看日志:

# 查看所有进程的日志
pm2 logs

# 查看特定进程的日志
pm2 logs <app-name>

方法二:配置PM2的日志文件

你也可以为每个应用单独配置日志文件的位置。这可以通过修改PM2的配置文件或直接在启动命令中指定。

修改PM2配置文件

创建或编辑ecosystem.config.js文件:

module.exports = {
  apps : [{
    name: 'app',
    script: './app.js',
    log_date_format: "YYYY-MM-DD HH:mm Z",
    out_file: "./logs/out.log",
    error_file: "./logs/err.log",
    merge_logs: true,
  }]
};

然后使用PM2启动应用:

pm2 start ecosystem.config.js

方法三:使用自定义日志处理器

如果你仍然希望使用像log4js这样的第三方库来处理日志,你可以将这些日志消息重新定向到PM2的默认日志流中。这通常需要一些额外的工作来实现,比如将日志消息打印到process.stdoutprocess.stderr

示例代码:

const log4js = require('log4js');

log4js.configure({
  appenders: { cheese: { type: 'file', filename: 'cheese.log' } },
  categories: { default: { appenders: ['cheese'], level: 'error' } }
});

const logger = log4js.getLogger();
logger.level = 'debug';

logger.debug("This is a debug message");

// 重定向到PM2的日志
logger.info = (msg) => process.stdout.write(`${msg}\n`);
logger.warn = (msg) => process.stdout.write(`${msg}\n`);
logger.error = (msg) => process.stderr.write(`${msg}\n`);

通过以上方法,你可以有效地将业务代码中的日志记录集成到PM2的管理框架中,从而更方便地管理和监控你的Node.js应用。


用console.log打印即可,会记录到pm2的log里

omg,我怎么就没想到,谢谢啊~

要在Node.js项目中将日志记录发送给PM2,可以通过配置log4js或直接使用console.log,然后让PM2处理这些日志。PM2会自动捕获所有输出到标准输出(stdout)和标准错误(stderr)的日志,并将其保存到指定的文件中。

示例代码

假设你正在使用log4js进行日志记录,可以按照以下步骤操作:

  1. 安装log4js

    npm install log4js --save
    
  2. 配置log4js: 在你的Node.js应用中配置log4js以输出日志到控制台。

    const log4js = require('log4js');
    
    log4js.configure({
        appenders: { cheese: { type: 'console' } },
        categories: { default: { appenders: ['cheese'], level: 'info' } }
    });
    
    const logger = log4js.getLogger();
    logger.info("This is an info message");
    
  3. 启动应用并让PM2管理: 使用PM2启动你的应用:

    pm2 start app.js
    
  4. 查看日志: PM2会捕获并存储日志到默认位置。你可以通过以下命令查看日志:

    pm2 logs
    

使用PM2的日志系统

如果你不想使用log4js,可以直接使用Node.js的内置日志功能(如console.log),PM2会自动捕获这些日志。

console.log("This is a console log message");

启动应用并查看日志:

pm2 start app.js
pm2 logs

总结

无论你选择哪种方法,PM2都会捕获并管理你的日志。使用log4js需要确保其配置正确,而直接使用console.log则更为简单,但可能需要更多地依赖于PM2的默认行为来管理日志。

回到顶部