Node.js-Protokollierung

177

Gibt es eine Bibliothek, die mir bei der Protokollierung in meiner Node.Js-Anwendung hilft? Ich möchte nur alle Protokolle in eine Datei schreiben und benötige Optionen wie das Ausrollen der Datei nach einer bestimmten Größe oder einem bestimmten Datum.


Ich habe log4js integriert und versuche, alle Konfigurationsdetails in einer Datei zu speichern und nur die Methoden in anderen Anwendungsdateien zu verwenden, um die Wartung zu vereinfachen. Aber es funktioniert nicht wie erwartet. Folgendes versuche ich zu tun

var log4js = require('log4js'); 
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');


var traceLogger = function (message) {
        logger.trace('message');
    };

var errorLogger = function (message) {
        logger.trace(message);
    };


exports.trace = traceLogger;
exports.error = errorLogger;

Ich habe diese Datei in andere Dateien aufgenommen und versucht

log.error ("Hello Error Message");

Aber es funktioniert nicht. Ist daran etwas falsch?

syv
quelle
1
log4js scheint in Ordnung zu sein. Sie haben die Fehlerstufe falsch eingestellt. es sollte sein: logger.setLevel (log4js.levels.ERROR);
Boklucius

Antworten:

196

Winston ist eine ziemlich gute Protokollierungsbibliothek. Sie können damit Protokolle in eine Datei schreiben.

Code würde ungefähr so ​​aussehen:

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/debug.log', json: false })
  ],
  exceptionHandlers: [
    new (winston.transports.Console)({ json: false, timestamp: true }),
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

Sie können dies dann wie folgt verwenden:

var logger = require('./log');

logger.info('log to file');
Charlie Key
quelle
3
Ich habe Winston schon lange benutzt. Es ist fehlerhaft geworden und ich habe es zugunsten von npmlog fallen lassen.
Airportyh
8
@jeder, scheint Winston wird wieder gewartet ... github.com/flatiron/winston/network
Daithí
Nur eine kurze Anmerkung: Rufen Sie im obigen Beispiel logger.cli () auf, um eine farbige Befehlszeilenausgabe zu erhalten.
Duncan
1
Winston erlaubt nicht, dass seine Konfiguration definiert und aus einer .json-Datei gelesen wird. Schlechtes Design, imo.
Minimum
59

Scribe.JS Lightweight Logger

Ich habe viele Logger durchgesehen und konnte keine einfache Lösung finden. Deshalb habe ich mich für eine einfache Lösung entschieden, die auf Github veröffentlicht wird.

  • Speichert die Datei, die nach Benutzer, Datum und Ebene organisiert ist
  • Gibt Ihnen eine schöne Ausgabe (wir alle lieben das)
  • Einfach zu bedienende HTML-Oberfläche

Ich hoffe das hilft dir weiter.

Online-Demo

http://bluejamesbond.github.io/Scribe.js/

Sicherer Webzugriff auf Protokolle

EIN

Druckt auch hübschen Text auf die Konsole!

EIN

Web-Zugang

EIN

Github

https://github.com/bluejamesbond/Scribe.js

Mathew Kurian
quelle
5
Diese Bibliothek wird nicht mehr gepflegt: github.com/bluejamesbond/…
Simon Meusel
30

Log4js ist eine der beliebtesten Protokollierungsbibliotheken für die Anwendung nodejs.

Es unterstützt viele coole Funktionen:

  1. Farbige Konsolenprotokollierung
  2. Ersetzen der console.log-Funktionen des Knotens (optional)
  3. Datei-Appender, wobei das Protokoll basierend auf der Dateigröße rollt
  4. SMTP, GELF, hook.io, Loggly Appender
  5. Multiprozess-Appender (nützlich, wenn Sie Arbeitsprozesse haben)
  6. Ein Logger für Connect / Express-Server
  7. Konfigurierbares Protokollnachrichtenlayout / -muster
  8. Unterschiedliche Protokollebenen für unterschiedliche Protokollkategorien (machen Sie einige Teile Ihres App-Protokolls als DEBUG, andere nur als FEHLER usw.)

Beispiel:

  1. Installation: npm install log4js

  2. Konfiguration ( ./config/log4js.json):

    {"appenders": [
        {
            "type": "console",
            "layout": {
                "type": "pattern",
                "pattern": "%m"
            },
            "category": "app"
        },{
            "category": "test-file-appender",
            "type": "file",
            "filename": "log_file.log",
            "maxLogSize": 10240,
            "backups": 3,
            "layout": {
                "type": "pattern",
                "pattern": "%d{dd/MM hh:mm} %-5p %m"
            }
        }
    ],
    "replaceConsole": true }
  3. Verwendung:

    var log4js = require( "log4js" );
    log4js.configure( "./config/log4js.json" );
    var logger = log4js.getLogger( "test-file-appender" );
    // log4js.getLogger("app") will return logger that prints log to the console
    logger.debug("Hello log4js");// store log in file
Tho
quelle
6

Die "logger.setLevel ('ERROR');" verursacht das Problem. Ich verstehe nicht warum, aber wenn ich es auf etwas anderes als "ALL" setze, wird nichts in der Datei gedruckt. Ich stöberte ein wenig herum und änderte Ihren Code. Es funktioniert gut für mich. Ich habe zwei Dateien erstellt.

logger.js

var log4js = require('log4js');
log4js.clearAppenders()
log4js.loadAppender('file');
log4js.addAppender(log4js.appenders.file('test.log'), 'test');
var logger = log4js.getLogger('test');
logger.setLevel('ERROR');

var getLogger = function() {
   return logger;
};

exports.logger = getLogger();

logger.test.js

var logger = require('./logger.js')

var log = logger.logger;

log.error("ERROR message");
log.trace("TRACE message");

Wenn ich "node logger.test.js" ausführe, wird in der Datei test.log nur "ERROR message" angezeigt. Wenn ich den Pegel auf "TRACE" ändere, werden beide Zeilen auf test.log gedruckt.

Alexander Jeyaraj
quelle
2
logging.apache.org/log4j/1.2/manual.html Loggern können Ebenen zugewiesen werden. Die Menge der möglichen Ebenen, dh: TRACE, DEBUG, INFO, WARN, ERROR und FATAL Eine Protokollierungsanforderung wird als aktiviert bezeichnet, wenn ihre Ebene höher oder gleich der Ebene ihres Loggers ist. Andernfalls wird die Anforderung als deaktiviert bezeichnet.
Shawn C.
3

Winston ist für die meisten Entwickler eine gute Wahl. Ich benutze Winston schon lange. Kürzlich habe ich Winston mit Papertrail verwendet, um die Anwendungsprotokollierung auf die nächste Stufe zu heben.

Hier ist ein schöner Screenshot von ihrer Seite.

Geben Sie hier die Bildbeschreibung ein

Wie nützlich es ist

  • Sie können Protokolle von verschiedenen Systemen an einem Ort verwalten. Dies kann sehr nützlich sein, wenn zwei Backends miteinander kommunizieren und Protokolle von beiden an Ort und Stelle angezeigt werden.

  • Protokolle sind live. Sie können Echtzeitprotokolle Ihres Produktionsservers anzeigen.

  • Leistungsstarke Suche und Filterung

  • Sie können Benachrichtigungen erstellen, um Ihnen E-Mails zu senden, wenn im Protokoll ein bestimmter Text gefunden wird.

und Sie können mehr finden http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Eine einfache Konfiguration verwendet winston, winston-expressund die winston-papertrailKnotenmodule.

import winston from 'winston';
import expressWinston from 'express-winston';
//
// Requiring `winston-papertrail` will expose
// `winston.transports.Papertrail`
//
require('winston-papertrail').Papertrail;
// create winston transport for Papertrail
var winstonPapertrail = new winston.transports.Papertrail({
  host: 'logsX.papertrailapp.com',
  port: XXXXX
});
app.use(expressWinston.logger({
  transports: [winstonPapertrail],
  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. Enabling this will override any msg if true. Will only output colors with colorize set to true
  colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red).
  ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
}));

Ich hoffe, das hilft jemandem, seine Protokolle zu verwalten !!

Weinreben
quelle
1
Dies funktioniert immer noch, aber nach dem Upgrade von Winston auf Version 3 erhalten Sie eine Warnung: "Papertrail ist ein Legacy-Winston-Transport. Erwägen Sie ein Upgrade." Derzeit steht ein Upgrade für den Transport aus.
Jim Jimson
2

Ein 'nodejslogger'-Modul kann zur einfachen Protokollierung verwendet werden. Es gibt drei Protokollierungsstufen (INFO, ERROR, DEBUG)

var logger = require('nodejslogger')
logger.init({"file":"output-file", "mode":"DIE"})

D: Debug, I: Info, E: Fehler

logger.debug("Debug logs")
logger.info("Info logs")
logger.error("Error logs")

Das Modul kann unter folgender Adresse aufgerufen werden: https://www.npmjs.com/package/nodejslogger

Rohit Kamal
quelle
0

Beachten Sie, dass errorLogger ein Wrapper um ist logger.trace . Die Ebene des Loggers ist jedoch ERROR, sodass logger.trace seine Nachricht nicht in den Appendern des Loggers protokolliert .

Die Lösung ist zu ändern logger.trace zu logger.error im Körper errorLogger .

Roland Maio
quelle