113

ログにタイムスタンプを追加したい。これを達成するための最良の方法は何ですか?

4

9 に答える 9

117

私も同じ問題を自分で扱っていました。私がこれを行うことができた2つの方法があります。

Winstonを含めると、通常、デフォルトでコンソールトランスポートが追加されます。このデフォルトの場合にタイムスタンプを機能させるには、次のいずれかを行う必要がありました。

  1. コンソールトランスポートを削除し、タイムスタンプオプションを使用して再度追加します。
  2. タイムスタンプオプションをtrueに設定して、独自のLoggerオブジェクトを作成します。

最初:

var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {'timestamp':true});

2番目のよりクリーンなオプション:

var winston = require('winston');
var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)({'timestamp':true})
    ]
});

コンソールトランスポートの他のオプションのいくつかはここにあります:

  • level:このトランスポートがログに記録する必要があるメッセージのレベル(デフォルトは「debug」)。
  • サイレント:出力を抑制するかどうかを示すブールフラグ(デフォルトはfalse)。
  • colorize:出力を色付けする必要があるかどうかを示すブールフラグ(デフォルトはfalse)。
  • タイムスタンプ:出力の前にタイムスタンプを付けるかどうかを示すブールフラグ(デフォルトはfalse)。関数が指定されている場合、タイムスタンプの代わりにその戻り値が使用されます。
于 2012-04-26T20:38:02.287 に答える
115

上記の答えは私にとってはうまくいきませんでした。Winston の最新バージョン - 3.0.0-rc1 を使用してログにタイムスタンプを追加しようとしている場合、これは魅力的に機能しました:

    const {transports, createLogger, format} = require('winston');

    const logger = createLogger({
        format: format.combine(
            format.timestamp(),
            format.json()
        ),
        transports: [
            new transports.Console(),
            new transports.File({filename: 'logs/error/error.log', level: 'error'}),
            new transports.File({filename: 'logs/activity/activity.log', level:'info'})
        ]
    });

「format.combine()」を使用しました。すべてのトランスポートにタイムスタンプが必要だったので、各トランスポート内ではなく、createLogger 内にフォーマット オプションを追加しました。コンソールとファイル (activity.log) での出力は次のとおりです。

{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}

通常どおり、次を使用して「format.combine()」でこのタイムスタンプにフォーマットを追加できます。

format.timestamp({format:'MM-YY-DD'})
于 2018-02-01T22:55:07.980 に答える
10

組み込みのutilforeverを使用して、nodejs サーバーのタイムスタンプを使用してログを記録できます。サーバーを起動するときに、パラメーターの一部としてログ出力を追加します。

forever start -ao log/out.log server.js

そして、あなたのserver.jsにutilを書くことができます

サーバー.js

var util = require('util');
util.log("something with timestamp");

out.log ファイルへの出力は次のようになります。

out.log

15 Mar 15:09:28 - something with timestamp
于 2014-03-15T19:23:30.160 に答える
6

私はウィンストンを認識していませんが、これは提案です。ロギングにlog4jsを使用しています。ログはデフォルトで次のようになります

[2012-04-23 16:36:02.965] [INFO] Development - Node Application is running on port 8090
[2012-04-23 16:36:02.966] [FATAL] Development - Connection Terminated to  '127.0.0.1' '6379'

開発は私のノードプロセスの環境です & [INFO|FATAL] はログレベルです

log4js では、ロギング用にさまざまなプロファイルを維持できます。私は開発と生産のプロファイルを持っています。また、ローリング ファイル アペンダー、コンソール アペンダーなどのロガー タイプもあります。アドオンとして、ログ ファイルはログ レベル [Trace、Info、Debug、Error、Fatal] に基づいてカラフルになります ;)

log4js は、console.log を上書きします。これは、0.5 以降で構成可能なパラメーターです。

于 2012-04-23T11:18:56.203 に答える
2

デフォルトのタイムスタンプ形式が都合が悪い場合があります。実装でオーバーライドできます。

それ以外の

var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
  new (winston.transports.Console)({'timestamp':true})
]
});

あなたは書ける

var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
  new (winston.transports.Console)({
     'timestamp': function() {
        return <write your custom formatted date here>;
     }
  })
]
});

詳細については、 https://github.com/winstonjs/winston#custom-log-formatを参照してください

于 2016-06-30T14:01:48.903 に答える