39

API、スクリプトなどにはいいようです。しかし、winston json スタック トレースをテキスト エディターで読み取るのは非常に困難です。例えば

{"level":"info","message":"starting","timestamp":"2014-05-14T15:45:44.334Z"}
{"date":"Wed May 14 2014 08:45:45 GMT-0700 (Pacific Daylight Time)","process":{"pid":8804,"uid":null,"gid":null,"cwd":"C:\\data\\mytool","execPath":"C:\\Program Files\\nodejs\\node.exe","version":"v0.10.21","argv":["node","C:\\data\\mytool\\server"],"memoryUsage":{"rss":45199360,"heapTotal":32171264,"heapUsed":15158096}},"os":{"loadavg":[0,0,0],"uptime":70496.6138252},"trace":[{"column":null,"file":null,"function":"Object.parse","line":null,"method":"parse","native":true},{"column":32,"file":"C:\\data\\mytool\\src\\status.js","function":"Request._callback","line":166,"method":"_callback","native":false},{"column":22,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"Request.self.callback","line":122,"method":"self.callback","native":false},{"column":17,"file":"events.js","function":"Request.EventEmitter.emit","line":98,"method":"EventEmitter.emit","native":false},{"column":14,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"","line":888,"method":null,"native":false},{"column":20,"file":"events.js","function":"Request.EventEmitter.emit","line":117,"method":"EventEmitter.emit","native":false},{"column":12,"file":"C:\\data\\mytool\\node_modules\\request\\request.js","function":"","line":839,"method":null,"native":false},{"column":20,"file":"events.js","function":"IncomingMessage.EventEmitter.emit","line":117,"method":"EventEmitter.emit","native":false},{"column":16,"file":"_stream_readable.js","function":null,"line":920,"method":null,"native":false},{"column":13,"file":"node.js","function":"process._tickCallback","line":415,"method":"_tickCallback","native":false}],"stack":["SyntaxError: Unexpected end of input","    at Object.parse (native)","    at Request._callback (C:\\data\\mytool\\src\\status.js:166:32)","    at Request.self.callback (C:\\data\\mytool\\node_modules\\request\\request.js:122:22)","    at Request.EventEmitter.emit (events.js:98:17)","    at Request.<anonymous> (C:\\data\\mytool\\node_modules\\request\\request.js:888:14)","    at Request.EventEmitter.emit (events.js:117:20)","    at IncomingMessage.<anonymous> (C:\\data\\mytool\\node_modules\\request\\request.js:839:12)","    at IncomingMessage.EventEmitter.emit (events.js:117:20)","    at _stream_readable.js:920:16","    at process._tickCallback (node.js:415:13)"],"level":"error","message":"uncaughtException: Unexpected end of input","timestamp":"2014-05-14T15:45:45.228Z"}
4

12 に答える 12

23

ファイル トランスポートの "json" プロパティを false に設定するだけで、人間が判読できるログを取得できます。コンソールに表示されるものと同じです。

    var winston = require('winston');
    var logger = new winston.Logger({
      transports: [
        new winston.transports.File({
          json: false,
          filename:'log.log'
        }),
        new winston.transports.Console()
      ],
      exitOnError: false
    });
   logger.log('info', 'some msg');
于 2014-12-28T12:24:10.773 に答える
16

JSON の sed に似たjqを介して渡します。例えば:

jq . file.log
于 2015-05-12T16:45:27.090 に答える
4

コマンド ラインで JSON フォーマッタを使用して実行してみませんか?

例(上記のリンクの例)

echo '{ element0: "lorem", element1: "ipsum" }' | python -mjson.tool

別の方法として、上記のツール (またはおそらく) jqの周りにシェル スクリプトを構築して、カスタム スタック トレースの解析を実行することを検討することもできます。

于 2014-05-14T16:10:53.883 に答える
2

Keen.IOを使用している場合- CLI ツールは行区切りの JSON をアップロードでき、「Explorer」を使用してログ イベントをフィルタリング/表示できます。

keen events:add --collection myLogs --file winston-output.json

于 2015-07-03T10:53:50.127 に答える
1

ノードのbunyanには、 CLIを使用して人間が読める方法で json ログをフィルタリングおよび表示できる機能があるようです。

$ node hi.js | bunyan -l warn
[2013-01-04T19:08:37.182Z]  WARN: myapp/40353 on banana.local: au revoir (lang=fr)

bunyan CLI 出力

于 2016-03-08T05:28:39.363 に答える
0

私はlnavを使用しています: json-logs をある程度サポートしています: つまり、独自のlog-formatを簡単に定義できます。このようにして、必要に応じて表示を最適化できます (つまり、winston のログ出力と一致するように)。

以下は、lnav-log-config の簡単な例です。

{
  "$schema": "https://lnav.org/schemas/format-v1.schema.json",
  "winston": {
    "title": "My Custom Json log format",
    "description": "Custom JSON-log format for winston",
    "url": "https://github.com/winstonjs/winston#formats",
    "file-pattern": "\\.jsonlog",
    "json": true,
    "level-field": "level",
    "timestamp-field": "timestamp",
    "body-field": "message",
    "line-format": [
      {
        "field": "__timestamp__"
      },
      " ",
      {
        "field": "__level__",
        "text-transform": "uppercase"
      },
      " ",
      {
        "field": "message"
      }
    ]
  }
}

注:私が使用していること"file-pattern": "\\.jsonlog",:必要に応じてこれを変更または削除してください。

lnavは私の WSL2 でも動作します。
通常どおりのインストール:sudo apt install lnav

于 2021-03-30T16:20:01.790 に答える