Node.js 如何使用log4js节点编写动态日志文件名?

Node.js 如何使用log4js节点编写动态日志文件名?,node.js,dynamic,log4js-node,Node.js,Dynamic,Log4js Node,我试图根据代码运行时的时间戳编写一个日志文件。 设置名称时,日志写得非常好,例如“Test.log”: 在“logs”文件夹中正确创建名为的日志文件,并用代码中的日志填充。 但是,当我尝试使名称动态化时,事情变得更加复杂: const appSettings = { log4js: { traceLogConfig: { appenders: { fileAppender: { typ

我试图根据代码运行时的时间戳编写一个日志文件。 设置名称时,日志写得非常好,例如“Test.log”:

在“logs”文件夹中正确创建名为的日志文件,并用代码中的日志填充。 但是,当我尝试使名称动态化时,事情变得更加复杂:

const appSettings = {
        log4js: {
            traceLogConfig: {
                appenders: {
                    fileAppender: { type: 'file', filename: `./logs/${new Date().toISOString().toString().replace(":","-")}`},
                    consoleAppender: { type: 'console' }
            },
            categories: {
                default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
            }
        }
    }
};
当我运行这个程序时,文件在文件夹中被正确创建,但是当代码运行时,它没有被日志条目填充。 我尝试单独创建名称并将其放入代码中:

let name = new Date().toISOString().toString().replace(":","-");

const appSettings = {
        log4js: {
            traceLogConfig: {
                appenders: {
                    fileAppender: { type: 'file', filename: `./logs/${name}`},
                    consoleAppender: { type: 'console' }
            },
            categories: {
                default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
            }
        }
    }
};

但这也没有解决问题。

显然,传递动态文件名是不可能的。您需要将占位符属性与多文件一起使用,然后传递属性名称(从):

这是可以做到的

让您的log4js配置文件保持原样:

       const appSettings = {
                log4js: {
                    traceLogConfig: {
                        appenders: {
                            fileAppender: { type: 'file', filename: `./logs/Test.log`},
                            consoleAppender: { type: 'console' }
                    },
                    categories: {
                        default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
                    }
                }
            }
        };
module.exports = appSettings;
加载配置时,您可以覆盖文件名,如下所示:

const { traceLogConfig } = require('./log4js-config').log4js;
traceLogConfig.appenders.fileAppender.filename = 'your file name';
log4js.configure(traceLogConfig);
       const appSettings = {
                log4js: {
                    traceLogConfig: {
                        appenders: {
                            fileAppender: { type: 'file', filename: `./logs/Test.log`},
                            consoleAppender: { type: 'console' }
                    },
                    categories: {
                        default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
                    }
                }
            }
        };
module.exports = appSettings;
const { traceLogConfig } = require('./log4js-config').log4js;
traceLogConfig.appenders.fileAppender.filename = 'your file name';
log4js.configure(traceLogConfig);