LoginSignup
5
1

More than 5 years have passed since last update.

Node.js: process.exitを呼ぶとloggerでファイルが出力されない

Posted at

環境

  • 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

備考

コンソールには出力されていたので、原因調査に少し時間がかかりました。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1