ログにタイムスタンプを追加したい。これを達成するための最良の方法は何ですか?
9 に答える
私も同じ問題を自分で扱っていました。私がこれを行うことができた2つの方法があります。
Winstonを含めると、通常、デフォルトでコンソールトランスポートが追加されます。このデフォルトの場合にタイムスタンプを機能させるには、次のいずれかを行う必要がありました。
- コンソールトランスポートを削除し、タイムスタンプオプションを使用して再度追加します。
- タイムスタンプオプションを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)。関数が指定されている場合、タイムスタンプの代わりにその戻り値が使用されます。
上記の答えは私にとってはうまくいきませんでした。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'})
組み込みのutilとforeverを使用して、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
私はウィンストンを認識していませんが、これは提案です。ロギングに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 以降で構成可能なパラメーターです。
デフォルトのタイムスタンプ形式が都合が悪い場合があります。実装でオーバーライドできます。
それ以外の
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を参照してください