首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用log4js-node写入动态日志文件名?

如何使用log4js-node写入动态日志文件名?
EN

Stack Overflow用户
提问于 2021-05-26 18:40:44
回答 2查看 273关注 0票数 0

我正在尝试根据代码运行时的时间戳来编写日志文件。当设置了名称时,日志写得非常好,例如"Test.log":

代码语言:javascript
复制
const appSettings = {
        log4js: {
            traceLogConfig: {
                appenders: {
                    fileAppender: { type: 'file', filename: `./logs/Test.log`},
                    consoleAppender: { type: 'console' }
            },
            categories: {
                default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
            }
        }
    }
};

在" logs“文件夹中正确地创建了一个具有该名称的日志文件,并使用代码中的日志填充该文件。然而,当我试图使名称动态化时,事情变得更加复杂:

代码语言:javascript
复制
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'}
            }
        }
    }
};

当我运行这段代码时,文件在文件夹中被正确创建,但是当代码运行时,它不会被日志条目填充。我尝试单独创建名称并将其放入代码中:

代码语言:javascript
复制
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'}
            }
        }
    }
};

但这也没有解决问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-27 22:32:15

显然,传递动态文件名是不可能的。您需要在multiFile中使用占位符属性,然后传递属性名称(来自documentation):

代码语言:javascript
复制
log4js.configure({
  appenders: {
    everything: {
      type: 'multiFile', base: 'logs/', property: 'userID', extension: '.log',
      maxLogSize: 10485760, backups: 3, compress: true
    }
  },
  categories: {
    default: { appenders: [ 'everything' ], level: 'debug'}
  }
});

const userLogger = log4js.getLogger('user');
userLogger.addContext('userID', user.getID());
userLogger.info('this user just logged in');
票数 0
EN

Stack Overflow用户

发布于 2021-06-02 23:10:03

这是可以做到的。

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

代码语言:javascript
复制
       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;

您可以在加载配置时覆盖文件名,如下所示:

代码语言:javascript
复制
const { traceLogConfig } = require('./log4js-config').log4js;
traceLogConfig.appenders.fileAppender.filename = 'your file name';
log4js.configure(traceLogConfig);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67703276

复制
相关文章

相似问题

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