[英]How to write dynamic log file names with log4js-node?
我正在嘗試根據代碼運行時的時間戳編寫日志文件。 設置名稱后日志寫得很好,例如“Test.log”:
const appSettings = {
log4js: {
traceLogConfig: {
appenders: {
fileAppender: { type: 'file', filename: `./logs/Test.log`},
consoleAppender: { type: 'console' }
},
categories: {
default: { appenders: ['fileAppender', 'consoleAppender'], level: 'trace'}
}
}
}
};
在“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);
顯然,不可能傳遞動態文件名。 您需要使用 multiFile 的占位符屬性,然后傳遞屬性名稱(來自文檔):
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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.