2015-04-20 1 views
11

Ich möchte ein nettes Protokoll mit kurzen Informationen über jede Anfrage an meinen Server sehen, die während der Entwicklung verwendet werden können. Ich habe die Dokumentation auf http://hapijs.com/api#request-logs gesehen, aber ich konnte nicht genug davon verstehen, um es zum Laufen zu bringen.Wie protokolliert man alle Anforderungen, die an einen hapi-Server gestellt werden, ohne eine Protokollierungsbibliothek zu verwenden?

Was soll ich als config-Objekt weitergeben, wenn ich den Server erstelle? Sollte ich dann auf Ereignisse hören und sie protokollieren oder passiert das automatisch? Wie protokolliere ich alle Anfragen und nicht nur die Fehler?

Ich möchte vermeiden, Logging-Bibliotheken zu installieren.

+0

haben Sie versucht, ein Plugin wie gut oder Bucker zu verwenden, wie vorgeschlagen in [http://hapijs.com/tutorials/logging](http://hapijs.com/tutorials/ Protokollierung)? – mucio

+0

Ich habe das gesehen, aber ich würde lieber keine neue Bibliothek einführen, außer es ist wirklich notwendig. Ich möchte ein einfaches und einfaches Protokoll aller Anfragen, wie es die meisten Bibliotheken standardmäßig tun. Benötigt Hapi dafür wirklich ein Plugin? – mik01aj

Antwort

27

So fand ich einen Weg:

server.on('response', function (request) { 
    console.log(request.info.remoteAddress + ': ' + request.method.toUpperCase() + ' ' + request.url.path + ' --> ' + request.response.statusCode); 
}); 

Das Protokoll sieht dann wie folgt aus:

127.0.0.1: GET /myEndpoint/1324134?foo=bar --> 200 
127.0.0.1: GET /sgsdfgsdrh --> 404 
+1

Sie sollten ['Good'] (https://github.com/hapijs/good) oder ein anderes [logging] (http://hapijs.com/tutorials/logging) Plugin verwenden. – paulodiovani

+7

Nein-nein-nein. Ich habe bereits in der Frage geschrieben, dass ich keine Logging-Bibliotheken möchte. Und ich habe das in Kommentaren zu anderer Antwort wiederholt. Ich brauchte nur eine * einfache * Protokollierung für den Entwickler. 'gut' könnte eine Antwort auf * deine * Frage sein, aber es ist keine Antwort auf * meine * Frage, wie ich sie gestellt habe. – mik01aj

+0

aber was ist mit Antwort Körper? alles hapijs ist Krebs ... –

7

Am einfachsten wäre es, das Modul good mit einem der good Reporter zu verwenden, zum Beispiel good-file. Hier ist ein Beispiel wie man es benutzt:

var Hapi = require('hapi'); 
var Good = require('good'); 

var server = new Hapi.Server(); 
server.connection({ port: 8080 }); 

server.route({ 
    method: 'GET', 
    path: '/', 
    handler: function (request, reply) { 

     reply('Hello, world!'); 
    } 
}); 

server.route({ 
    method: 'GET', 
    path: '/{name}', 
    handler: function (request, reply) { 

     reply('Hello, ' + encodeURIComponent(request.params.name) + '!'); 
    } 
}); 

server.register({ 
    register: Good, 
    options: { 
     reporters: [{ 
      reporter: require('good-file'), 
      events: { 
       response: '*', 
       log: '*' 
      }, 
      config: { 
       path: '/var/log/hapi', 
       rotate: 'daily' 
      } 
     }] 
    } 
}, function (err) { 

    if (err) { 
     throw err; // something bad happened loading the plugin 
    } 

    server.start(function() { 

     server.log('info', 'Server running at: ' + server.info.uri); 
    }); 
}); 
+0

Ich würde lieber nicht eine andere Bibliothek für das Projekt nur für ein einfaches Protokoll aller Anfragen hinzufügen. – mik01aj

+1

Beachten Sie, dass Sie [das Ausgabeformat auch nicht mit Gut] anpassen können (https://github.com/hapijs/good-file/issues/66). – mik01aj

+0

Die akzeptierte Antwort ist * einfacher * als diese, weil man sich keine Gedanken über die Inkompatibilität von Plug-In-Versionen machen muss. – nobar

4

In Hapi.js Version über v17 Bitte machen Sie die folgenden Änderungen, damit es funktioniert:

Das Protokoll wird:

127.0.0.1: GET /todo --> 200 
Verwandte Themen