環境
- Node.js v10.13.0
- log4js: 3.0.6
- ECMAScript6
やりたいこと
log4jsを使って、ファイルとコンソールにログを出力したいです。
// logger設定
const logger = initialLogger();
logger.debug("start");
// *** 終了であることを示すため、以下の文を追加してしまった ***
process.exit(0);
/**
* loggerの初期化
*/
function initialLogger() {
const log4js = require("log4js");
const logFilePath = "test-log.txt";
const patternForFile = "[%d{ISO8601_WITH_TZ_OFFSET}] %h %p %c: %m";
const patternForConsole = `%[${patternForFile}%]`;
log4js.configure(
{
appenders: {
outConsole: { type: "console", layout: {type:"pattern", pattern: patternForConsole} },
outFile: { type: "datefile", filename: logFilePath, layout: {type:"pattern", pattern: patternForFile} },
},
categories: {
default: { appenders: ["outConsole", "outFile"], level: "debug" },
},
});
const logger = log4js.getLogger();
logger.level = "debug";
return logger;
}
問題
node test.js
で実行すると、コンソールには以下の内容が出力されましたが、test-log.txt
には出力されていませんでした。
[2019-02-12T11:10:58.691+0900] DESKTOP-41K65S9 DEBUG default: start
原因
process.exit
は非同期処理を待ってくれないから。
参考サイト
https://takamints.hatenablog.jp/entry/dont-invoke-the-process-exit-on-success
http://neos21.hatenablog.com/entry/2017/11/24/080000
備考
コンソールには出力されていたので、原因調査に少し時間がかかりました。