5

node.js に実装されたサーバーがあり、ロギングには Bunyan を使用しています。これまで、問題をデバッグする必要があるときは、コンソールでログを確認するか、古いログ ファイルを/bunyan/bin/bunyan <log_file.log>. これは、サーバーに vnc または ssh で接続する必要があるため、理想とはほど遠いものになりつつあります。古いログを見ていると、bunyan cli で探しているものを見つけるのに長い時間がかかります。

ロギング機能を拡張してログ ファイルを提供し、ブラウザで表示できるようにしたいと考えています。これまでのところ、これは私が実装したものです:

var express = require('express');
var app = express();
var bunyan = require('bunyan');
var serveIndex = require('serve-index');

var log = bunyan.createLogger({
                            name: 'server',
                            streams: [
                            {
                                level: 'info',
                                stream: process.stdout
                            },
                            {
                                type: 'rotating-file',
                                level: 'info',
                                path: __dirname+'/logs/server-logs.log',
                                period: '1m',
                                count: 12
                            }
                            ]
                            });

app.use('/logs', serveIndex('logs', {'icons': true}))
    app.get('/logs/*',function(req,res)
    {
        var file_name = __dirname + '/logs/' + JSON.stringify(req.params['0']);
        file_name = file_name.replace(/"/g, '');
        log.info(file_name);
        var obj = fs.readFileSync(file_name, 'utf8');

        res.format({
            'application/json': function(){
                res.send(obj);
            },
            'default': function(){
                res.status(406).send('Not Acceptable');
            }
        });
    });

/*Run the server*/
app.listen(3005,function()
{
    log.info("Started.");
});

これによりhttp://server/logs、すべてのログ ファイルのリストにアクセスできるようになり、それらをクリックしてブラウザに表示することができます。問題は、それらがまだ生の json であり、読みやすい形式ではないことです。

私が望むのは、bunyan が cli で印刷するのと同じように、ブラウザーできれいに印刷することです。

助言がありますか?これを行うものを探して何時間も検索しましたが、何も見つかりませんでした。

ありがとう!

4

2 に答える 2

-1

アプリケーションに HTML を追加できる場合は、bunyan ログに ajax リクエストをロードするだけです。これは単なる JSON 応答であるため、必要に応じてフォーマットできます。また、最新のブラウザーでは、JSON をより読みやすい形式にできます。

JSON オブジェクトを文字列に変換するときは、スペースでインデントできます。

JSON.stringify(bunyanLogsObject, null, 2);

どこ:

  • bunyanLogsObject- あなたのログです
  • null- 置き換え、以下をお読みください
  • 2- インデントするスペースの数。このパラメーターが実際に書式設定を有効にする場合

置換として、入力または表示するホワイトリスト プロパティの配列をさらにフォーマットする関数を提供できます。詳細は MDNにあります。

于 2016-02-16T18:48:35.610 に答える