1

私はnodejsの初心者であり、ノードアプリがコンソールだけでなくファイルにもログを記録したいと考えていました。

これが私のコード構造です:

fpa_log4j.json :

{
  "appenders": {
    "fpa_file": {
      "type": "file",
      "filename": "fpa.log",
      "maxLogSize": 10485760,
      "backups": 10,
      "compress": true
    },
    "screen": {
      "type": "stdout",
      "layout": {
        "type": "coloured"
      }
    }
  },
  "categories": {
    "default": {
      "appenders": [
        "fpa_file",
        "screen"
      ],
      "level": "trace"
    }
  }
}

config.js

var LOG4J_CFG = 'config/fpa_log4j.json';
var fs = require('fs');
var log4js = require('log4js');
var path = require('path');

LOG4J_CFG = path.resolve(LOG4J_CFG);
log4js.configure(JSON.parse(fs.readFileSync(LOG4J_CFG, 'utf8')));
....
....
module.exports = {
    log4js,
    ....
    ....
}

app.js

var cfg = require('./config');
var log = cfg.log4js.getLogger("appMain");
log.info('FPA program STARTED!');

出力

[2017-12-04T03:20:17.791] [INFO] appMain - FPA program STARTED!

ただし、ログ ファイルは空のようです。

dir fpa.log
 Volume in drive C is XXXXXXXXX
 Volume Serial Number is XXXXXXXXXXXX

 Directory of c:\fpaMain

12/04/2017  12:13 AM                 0 fpa.log
               1 File(s)              0 bytes
               0 Dir(s)  12,242,776,064 bytes free

率直に言って、私は数日前にこの作業を行うことができました。しかし、その後、何かが変更されました (残念ながら、それが何であるかを思い出すことができません!) 推測すると、ファイルへのログインが停止しました。

4

1 に答える 1

3

Ok。それで、やっとわかった。他の人のためにここで共有します。ここに来ます:

log.info()app.js にはさらにいくつかの行があり (わかりやすくするために削除されています)、実際にはステートメントの直後にアプリがクラッシュしていました。そして、コンソールに表示されるのと同じように、ステートメントがログファイルに表示されることを期待していました。しかし、その後、他のプログラミング言語とは異なり、nodejs は生まれながらにして並列処理の強力な機能を備えていることに気付きませんでした(実際、それは私が nodejs を好きになった主な理由の 1 つです :))。

したがって、私の場合、並列処理の並外れた機能により、nodejs はログ ステートメントを起動し、他のステートメントの処理を続けました。そして、クラッシュすると、プログラム全体がダウンしました。コンソールへの書き込みは IO よりもはるかに高速だったため (明らかな理由で!!)、画面に表示される速度も速くなりました。しかし、ファイル システムに書き込む前にアプリがクラッシュし、ファイルには何も書き込まれませんでした。

学んだ教訓:

  1. nodejs === 並列処理であることを常に覚えておいてください
  2. 上記のような IO 関連の問題については、プログラムが完了するまで、またはクラッシュする前に少なくとももう少し実行して、IO が完了するのに十分な時間を確保してください。
于 2017-12-06T10:14:51.180 に答える