首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pm2中按日期隔离日志?

如何在pm2中按日期隔离日志?
EN

Stack Overflow用户
提问于 2021-05-30 15:00:58
回答 1查看 225关注 0票数 0

我将PM2用于NodeJS服务器,我在package.json文件中有一些npm命令,它们在生产或开发模式下调用pm2,如下所示:

代码语言:javascript
运行
复制
"scripts": {
    "dev": "env NODE_ENVIRONMENT=development pm2-dev start ecosystem.config.js --ignore 'data'",
    "production": "env NODE_ENVIRONMENT=production pm2 start ecosystem.config.js"
}

调用这些命令时,ecosystem.config.js文件在生产和开发环境中分别使用节点解释器或ts节点解释器。

代码语言:javascript
运行
复制
const { mkdirSync } = require('fs');

var script = "";
var exec_interpreter = "";
var err_log = "";
var out_log = "";
var combined_log = "";
var date = new Date().toISOString();

if (process.env.NODE_ENVIRONMENT === 'production') {
    script = "dist/app.js";
    exec_interpreter = "node";

    mkdirSync(`./logs/${date}`, { recursive: true }, (err) => {
        if (!err) {
            err_log = './logs/' + date + '/error.log';
            out_log = './logs/' + date + '/output.log';
            combined_log = './logs/' + date + '/combined.log';
        } else { console.error(err), process.exit(1) };
    });
}

if (process.env.NODE_ENVIRONMENT === 'development') {
    script = "src/app.ts";
    exec_interpreter = "ts-node";
}

module.exports = {
    apps: [{
        name: 'Hyve',
        script: script,
        exec_interpreter: exec_interpreter,
        max_restarts: 10,
        error_file: err_log,
        out_file: out_log,
        log_file: combined_log,
        time: true
    }]
}

如您所见,日志还被定向到生产环境中的日志文件。但是,当脚本在生产环境中运行时,日志文件并没有像我希望的那样放到单独的文件夹中,而是写入到logs文件夹的根目录中。这将有助于可视化我的意思:

预期结果:

代码语言:javascript
运行
复制
logs
├── 2021-05-30T06:56:31.477Z
│   ├── combined.log
│   ├── error.log
│   └── output.log
└── 2021-05-30T06:56:56.512Z
    ├── combined.log
    ├── error.log
    └── output.log

实际结果:

代码语言:javascript
运行
复制
logs
├── 2021-05-30T06:56:31.477Z
├── 2021-05-30T06:56:56.512Z
├── combined.log
├── error.log
└── output.log

我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2021-05-30 15:07:49

代码语言:javascript
运行
复制
var date = new Date();
var dat= date.getDate()+"-"+date.getMonth()+"-"+date.getFullYear();


fs.mkdirSync(`./logs/${dat}`, { recursive: true });

fs.exists("./logs/${dat}",(err) => {
    
    if (!err) {
        console.log('in');
        err_log = './logs/' + date.toISOString() + '/error.log';
        out_log = './logs/' + date.toISOString() + '/output.log';
        combined_log = './logs/' + date.toISOString() + '/combined.log';
    } else { 
        
        console.error(err)};
        console.log("created succesfully");
});

在这里,我用ISOString分离了主文件夹中的日期和日志文件,这也会帮助你花时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67758604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档