2013-10-30 7 views
11

ich mich gefragt, ob node.js (oder Rahmen auszudrücken) hat jede Art von in der Zugriffsprotokollierung gebaut wie Grails zum Beispiel hat?gebaut Zugriffsprotokolle in node.js (express Rahmen)

Ich habe Grails-Anwendung, die auf Tomcat läuft und erzeugt automatisch /apache-tomcat-7.0.42/logs/localhost_access_log.2013.10.30.txt Datei, in denen Protokolle über Anfrage Antwort wie diese:

[30/Oct/2013:00:00:01 +0000] [my-ip-address] [http-bio-8080-exec-18] "GET /my-service/check HTTP/1.0" [200] [took: 1 milis] 

Diese Protokolle werden automatisch vom System geschrieben und ich habe nicht zu mach dir darüber Sorgen.

Und was ist mit node.js?

Danke für jede Hilfe!

Ivan

+2

möglich Duplikat (http://stackoverflow.com/questions/5489815/ Logging-in-express-js-zu-einem-output-Datei) – thgaskell

+0

Es tut. Sie müssen es aktivieren. Sehen Sie die Antworten auf die Frage von Thagaskell. – user568109

Antwort

8

bearbeiten Ab Express 4.0.0 diese Lösung ist offenbar nicht mehr genug. Lesen Sie die Antwort von whirlwin für eine aktualisierte Lösung.

können Sie verwenden app.use(express.logger());

hier Dokumentiert: http://www.senchalabs.org/connect/logger.html

+0

Danke. Weißt du, wie man die Ausführungszeit wie in meinem Grals Logger hinzufügt? –

+0

@ivan_zd ': Antwortzeit' – robertklep

+0

Nun, nach der Dokumentation auf der Verbindung, der erste Parameter zu logger() ist das Format. Und sie decken Formatierungsoptionen weiter unten auf der Seite ab. Ich benutze den Logger aber nicht, also weiß ich nicht von oben ... –

22

In neueren Versionen von Express (4.0.0 zum Zeitpunkt des Schreibens), der Logger ist nicht mehr Teil von Express, so dass Sie um es als Abhängigkeit manuell einzubeziehen. Es heißt jetzt morgan.

Also, in package.json, fügt morgan als Abhängigkeit:

"dependencies": { 
    ... 
    "morgan": "*" 
    ... 
} 

Und in Ihrer Express-Konfiguration hinzu:

app.use(require('morgan')('dev')); 

Nun sollte wie vor mehr oder weniger Protokollierung arbeiten. :-)

+0

Wir müssen neue Versionen von Express verwenden. – Dalinaum

+1

@Dalinaum Dann ist dies für Sie. :-) – whirlwin

9

Ab sofort sind die meisten Middleware (wie Logger) nicht mehr mit express gebündelt und müssen separat installiert werden.

Kurze Antwort: Zuerst installieren morgan:

npm install morgan 

es dann für die Anmeldung verwenden:

app = express(); 
var morgan = require('morgan') 
... 
app.use(morgan('combined')) 

Dokumentation ist here.

1

Es ist nicht eingebaut, aber sehr einfach zu konfigurieren. Sie können express-winston verwenden und zum Express-Middleware-Stack hinzufügen.morgandoes not let you log the request body aber expressWinston tut:

expressWinston.requestWhitelist.push('body'); 
expressWinston.responseWhitelist.push('body'); 

Beispiel in Coffeescript: [? Zu einer Ausgabedatei in Express.js Logging]

expressWinston.requestWhitelist.push('body') 
expressWinston.responseWhitelist.push('body') 
app.use(expressWinston.logger({ 
     transports: [ 
     new winston.transports.Console({ 
      json: true, 
      colorize: true 
     }) 
     ], 
     meta: true, // optional: control whether you want to log the meta data about the request (default to true) 
     msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}" 
     expressFormat: true, // Use the default Express/morgan request formatting, with the same colors. Enabling this will override any msg and colorStatus if true. Will only output colors on transports with colorize set to true 
     colorStatus: true, // Color the status code, using the Express/morgan color palette (default green, 3XX cyan, 4XX yellow, 5XX red). Will not be recognized if expressFormat is true 
     ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response 
    })); 
+0

statt dessen sollte ich nicht nur winston verwenden ?? –