Dies bleibt zu weit gefasst, da Sie dies NICHT vom Client-Computer aus tun können.
Joshua
Antworten:
112
Ich habe mich selbst mit dem gleichen Thema befasst. Es gibt zwei Möglichkeiten, wie ich dies tun konnte.
Wenn Sie Winston einschließen, wird normalerweise standardmäßig ein Konsolentransport hinzugefügt. Damit Zeitstempel in diesem Standardfall funktionieren, musste ich entweder:
Entfernen Sie den Konsolentransport und fügen Sie ihn erneut mit der Zeitstempeloption hinzu.
Erstellen Sie Ihr eigenes Logger-Objekt mit der Zeitstempeloption true.
Der Erste:
var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console,{'timestamp':true});
Die zweite und sauberere Option:
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
Einige der anderen Optionen für den Konsolentransport finden Sie hier :
Ebene: Ebene der Nachrichten, die dieser Transport protokollieren soll (Standard 'Debug').
Silent: Boolesches Flag, das angibt, ob die Ausgabe unterdrückt werden soll (Standardwert false).
colorize: Boolesches Flag, das angibt, ob die Ausgabe koloriert werden soll (Standardwert false).
Zeitstempel: Boolesches Flag, das angibt, ob der Ausgabe Zeitstempel vorangestellt werden sollen (Standardwert false). Wenn die Funktion angegeben ist, wird ihr Rückgabewert anstelle von Zeitstempeln verwendet.
Das ist toll. Normalerweise verpacke ich dies in eine dedizierte Datei, damit ich meinen konfigurierten Logger problemlos aus jeder Datei abrufen kann, dh ich füge den obigen Code (Option 2) in eine neue Datei logger.js ein, gefolgt von module.exports = logger; dann mache ich aus jeder Datei var logger = require ('./ logger.js') und kann dann logger.info ('hallo') aus jeder Datei machen und die gleiche Konfiguration von Winston erhalten.
JHH
TypeError: (Zwischenwert) ist keine Funktion
Urasquirrel
79
Die obigen Antworten haben bei mir nicht funktioniert. Wenn Sie versuchen, Ihren Protokollen mit der neuesten Version von Winston - 3.0.0-rc1 einen Zeitstempel hinzuzufügen, hat dies wie ein Zauber funktioniert:
Ich habe 'format.combine ()' verwendet. Da ich für alle meine Transporte einen Zeitstempel benötigte, habe ich die Formatierungsoption im createLogger und nicht in jedem Transport hinzugefügt. Meine Ausgabe auf der Konsole und in der Datei (activity.log) lautet wie folgt:
{"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"}
Wir können diesem Zeitstempel wie gewohnt eine Formatierung in 'format.combine ()' hinzufügen, indem wir Folgendes verwenden:
Funktioniert das auch für logger.info('Message', someObject)? Ich habe ein benutzerdefiniertes Format mit Mähdrescher eingerichtet und kann das someObjectin der Protokollnachricht enthaltene Format anscheinend nicht erhalten .
Etwas am
1
Ich konnte someObjectmithilfe der folgenden printf-Anweisung aufgenommen werden ${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}. Es enthält die Ebene, den Zeitstempel und die Nachricht, die ich vermutlich löschen könnte.
Etwas am
9
Sie können das integrierte util und für immer verwenden , um die Protokollierung mit Zeitstapel für Ihren nodejs-Server zu erreichen. Wenn Sie einen Server starten, fügen Sie die Protokollausgabe als Teil des Parameters hinzu:
forever start -ao log/out.log server.js
Und dann können Sie util in Ihre server.js schreiben
server.js
var util = require('util');
util.log("something with timestamp");
Die Ausgabe sieht in der Datei out.log ungefähr so aus:
Überspringt leider die util.error()Zeitstempelung der Ausgabe.
Saran
4
Obwohl mir Winston nicht bekannt ist, ist dies ein Vorschlag. Ich verwende log4js für die Protokollierung und meine Protokolle sehen standardmäßig so aus
[2012-04-2316:36:02.965][INFO]Development-NodeApplication is running on port 8090[2012-04-2316:36:02.966][FATAL]Development-ConnectionTerminated to '127.0.0.1''6379'
Entwicklung ist die Umgebung meines Knotenprozesses und [INFO | FATAL] ist die Protokollebene
Das Verwalten verschiedener Profile für die Protokollierung ist in log4js möglich. Ich habe Entwicklungs- und Produktionsprofile. Es gibt auch Logger-Typen wie Rolling File Appender, Console Appender usw. Als Addon werden Ihre Log-Dateien basierend auf der Log-Ebene [Trace, Info, Debug, Error, Fatal] bunt sein;)
log4js überschreibt Ihre console.log. Dies ist ein konfigurierbarer Parameter, der jetzt in 0.5+ enthalten ist
Zu Ihrer Information: Neuere Versionen von log4js-node (0.5+) überschreiben console.log nicht automatisch.
Jeff Hiltz
@ Jeffhiltz Ya Sie haben Recht :) Jetzt ist es ein konfigurierbarer Parameter
Tamil
2
Manchmal ist das Standard-Zeitstempelformat für Sie nicht geeignet. Sie können es mit Ihrer Implementierung überschreiben.
Anstatt
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
Du kannst schreiben
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':function(){return<write your custom formatted date here>;}})]});
Wir könnten den Konsolenstempel verwenden, um der vorhandenen Konsole Zeitstempel und Protokollstufe hinzuzufügen: require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Eine andere Lösung besteht darin, den Logger in eine Datei zu verpacken, die einige Funktionen wie logger.info (), logger.error () usw. exportiert. Anschließend übergeben Sie einfach einen zusätzlichen Schlüssel, der für jedes Nachrichtenprotokoll gesendet wird.
Ich nahm Biswadevs Antwort und erstellte ein stringifiziertes JSON-Objekt. Auf diese Weise wird es in einem gut strukturierten Format vorliegen, wenn ich die Protokolle später verarbeiten muss.
Antworten:
Ich habe mich selbst mit dem gleichen Thema befasst. Es gibt zwei Möglichkeiten, wie ich dies tun konnte.
Wenn Sie Winston einschließen, wird normalerweise standardmäßig ein Konsolentransport hinzugefügt. Damit Zeitstempel in diesem Standardfall funktionieren, musste ich entweder:
Der Erste:
Die zweite und sauberere Option:
Einige der anderen Optionen für den Konsolentransport finden Sie hier :
quelle
Die obigen Antworten haben bei mir nicht funktioniert. Wenn Sie versuchen, Ihren Protokollen mit der neuesten Version von Winston - 3.0.0-rc1 einen Zeitstempel hinzuzufügen, hat dies wie ein Zauber funktioniert:
Ich habe 'format.combine ()' verwendet. Da ich für alle meine Transporte einen Zeitstempel benötigte, habe ich die Formatierungsoption im createLogger und nicht in jedem Transport hinzugefügt. Meine Ausgabe auf der Konsole und in der Datei (activity.log) lautet wie folgt:
Wir können diesem Zeitstempel wie gewohnt eine Formatierung in 'format.combine ()' hinzufügen, indem wir Folgendes verwenden:
quelle
Das können wir auch
quelle
logger.info('Message', someObject)
? Ich habe ein benutzerdefiniertes Format mit Mähdrescher eingerichtet und kann dassomeObject
in der Protokollnachricht enthaltene Format anscheinend nicht erhalten .someObject
mithilfe der folgenden printf-Anweisung aufgenommen werden${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}
. Es enthält die Ebene, den Zeitstempel und die Nachricht, die ich vermutlich löschen könnte.Sie können das integrierte util und für immer verwenden , um die Protokollierung mit Zeitstapel für Ihren nodejs-Server zu erreichen. Wenn Sie einen Server starten, fügen Sie die Protokollausgabe als Teil des Parameters hinzu:
Und dann können Sie util in Ihre server.js schreiben
server.js
Die Ausgabe sieht in der Datei out.log ungefähr so aus:
out.log
quelle
util.error()
Zeitstempelung der Ausgabe.Obwohl mir Winston nicht bekannt ist, ist dies ein Vorschlag. Ich verwende log4js für die Protokollierung und meine Protokolle sehen standardmäßig so aus
Entwicklung ist die Umgebung meines Knotenprozesses und [INFO | FATAL] ist die Protokollebene
Das Verwalten verschiedener Profile für die Protokollierung ist in log4js möglich. Ich habe Entwicklungs- und Produktionsprofile. Es gibt auch Logger-Typen wie Rolling File Appender, Console Appender usw. Als Addon werden Ihre Log-Dateien basierend auf der Log-Ebene [Trace, Info, Debug, Error, Fatal] bunt sein;)
log4js überschreibt Ihre console.log. Diesist ein konfigurierbarer Parameter, der jetzt in 0.5+ enthalten istquelle
Manchmal ist das Standard-Zeitstempelformat für Sie nicht geeignet. Sie können es mit Ihrer Implementierung überschreiben.
Anstatt
Du kannst schreiben
Weitere Informationen finden Sie unter https://github.com/winstonjs/winston#custom-log-format
quelle
Wir könnten den Konsolenstempel verwenden, um der vorhandenen Konsole Zeitstempel und Protokollstufe hinzuzufügen:
require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Weitere Informationen finden Sie unter https://github.com/starak/node-console-stamp
quelle
Eine andere Lösung besteht darin, den Logger in eine Datei zu verpacken, die einige Funktionen wie logger.info (), logger.error () usw. exportiert. Anschließend übergeben Sie einfach einen zusätzlichen Schlüssel, der für jedes Nachrichtenprotokoll gesendet wird.
loggerService.js
was auch immer-file.js
your-log.log
quelle
Ich nahm Biswadevs Antwort und erstellte ein stringifiziertes JSON-Objekt. Auf diese Weise wird es in einem gut strukturierten Format vorliegen, wenn ich die Protokolle später verarbeiten muss.
Verwendung:
Ausgabe:
info.log Datei:
Konsole:
quelle