Rejestrowanie Node.js

177

Czy istnieje biblioteka, która pomoże mi w obsłudze logowania w mojej aplikacji Node.Js? Chcę tylko zapisać wszystkie dzienniki do pliku, a także potrzebuję opcji, takich jak rozwijanie pliku po określonym rozmiarze lub dacie.


Włączyłem log4js im, starając się zachować wszystkie szczegóły konfiguracji w jednym pliku i używać tylko metod w innych plikach aplikacji, aby ułatwić konserwację. Ale to nie działa zgodnie z oczekiwaniami. Oto, co próbuję zrobić

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;

Umieściłem ten plik w innych plikach i próbowałem

log.error ("Hello Error Message");

Ale to nie działa. Czy jest w tym coś złego?

syv
źródło
1
log4js wydaje się być w porządku. źle ustawiłeś poziom błędu. powinno to być: logger.setLevel (log4js.levels.ERROR);
Boklucius

Odpowiedzi:

196

Winston to całkiem niezła biblioteka do logowania. Możesz za jego pomocą zapisywać logi do pliku.

Kod wyglądałby mniej więcej tak:

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;

Możesz wtedy użyć tego w następujący sposób:

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

logger.info('log to file');
Charlie Key
źródło
3
Używam Winstona przez długi czas. Zrobił się wadliwy i porzuciłem go na rzecz npmlog.
lotnisko
8
@everyone, wygląda na to, że winston jest ponownie utrzymywany ... github.com/flatiron/winston/network
Daithí
Krótka uwaga: wywołaj logger.cli () w powyższym przykładzie, aby uzyskać kolorowe wyjście wiersza poleceń.
Duncan
1
Winston nie pozwala na definiowanie i odczytywanie swojej konfiguracji z pliku .json. Kiepski projekt, imo.
miniml
59

Lekki rejestrator Scribe.JS

Przejrzałem wiele rejestratorów i nie mogłem znaleźć lekkiego rozwiązania - więc zdecydowałem się zrobić proste rozwiązanie, które jest zamieszczone na githubie.

  • Zapisuje plik uporządkowany według użytkownika, daty i poziomu
  • Daje całkiem niezłą wydajność (wszyscy to kochamy)
  • Łatwy w użyciu interfejs HTML

Mam nadzieję, że to ci pomoże.

Demo online

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

Bezpieczny dostęp sieciowy do dzienników

ZA

Również drukuje ładny tekst na konsoli!

ZA

Dostęp do sieci

ZA

Github

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

Mathew Kurian
źródło
5
ta biblioteka nie jest już utrzymywana: github.com/bluejamesbond/ ...
Simon Meusel
30

Log4js to jedna z najpopularniejszych bibliotek logujących dla aplikacji nodejs.

Obsługuje wiele fajnych funkcji:

  1. Kolorowe rejestrowanie konsoli
  2. Zastąpienie funkcji console.log węzła (opcjonalnie)
  3. Program dołączający plik z przewijaniem dziennika na podstawie rozmiaru pliku
  4. SMTP, GELF, hook.io, Loggly appender
  5. Multiprocess appender (przydatne, gdy masz procesy robocze)
  6. Logger dla serwerów connect / express
  7. Konfigurowalny układ / wzorce komunikatów dziennika
  8. Różne poziomy dzienników dla różnych kategorii dzienników (zrób niektóre części dziennika aplikacji jako DEBUG, inne tylko BŁĘDY itp.)

Przykład:

  1. Instalacja: npm install log4js

  2. Konfiguracja ( ./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. Stosowanie:

    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
Chociaż
źródło
6

The "logger.setLevel ('ERROR');" powoduje problem. Nie rozumiem dlaczego, ale kiedy ustawię coś innego niż „WSZYSTKO”, nic nie zostanie wydrukowane w pliku. Poszperałem trochę i zmodyfikowałem twój kod. U mnie działa dobrze. Utworzyłem dwa pliki.

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");

Gdy uruchamiam „node logger.test.js”, widzę tylko „komunikat o błędzie” w pliku test.log. Jeśli zmienię poziom na „TRACE”, obie linie zostaną wydrukowane na test.log.

Alexander Jeyaraj
źródło
2
logging.apache.org/log4j/1.2/manual.html Rejestratorom można przypisać poziomy. Zestaw możliwych poziomów, to jest: TRACE, DEBUG, INFO, WARN, ERROR i FATAL. Żądanie logowania mówi się, że jest włączone, jeśli jego poziom jest wyższy lub równy poziomowi jego rejestratora. W przeciwnym razie żądanie jest wyłączone.
Shawn C.,
3

Winston to dobry wybór dla większości programistów. Używam Winstona od dawna. Ostatnio użyłem winston z papertrail, który przenosi logowanie aplikacji na wyższy poziom.

Oto ładny zrzut ekranu z ich strony.

wprowadź opis obrazu tutaj

Jak to jest przydatne

  • możesz zarządzać logami z różnych systemów w jednym miejscu. może to być bardzo przydatne, gdy komunikujesz się z dwoma backendami i widzisz dzienniki z obu na miejscu.

  • Dzienniki są aktywne. możesz wyświetlać dzienniki w czasie rzeczywistym z serwera produkcyjnego.

  • Zaawansowane wyszukiwanie i filtrowanie

  • możesz tworzyć alerty, aby wysyłać Ci e-maile, jeśli napotkasz określony tekst w dzienniku.

i możesz znaleźć więcej http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Prostej konfiguracji za pomocą winston, winston-expressa winston-papertrailmoduły węzła.

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
}));

Mam nadzieję, że pomoże to komuś w zarządzaniu dziennikami !!

winorośl
źródło
1
To nadal działa, jednak po aktualizacji winston do v3 pojawia się ostrzeżenie: „Papertrail jest starszym transportem winston. Rozważ aktualizację”. Jest ulepszenie transportu, które jest obecnie wyjątkowe.
Jim Jimson,
2

Do prostego logowania można użyć modułu „nodejslogger”. Posiada trzy poziomy logowania (INFO, ERROR, DEBUG)

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

D: debugowanie, I: informacje, E: błąd

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

Dostęp do modułu można uzyskać pod adresem : https://www.npmjs.com/package/nodejslogger

rohit kamal
źródło
0

Zauważ, że errorLogger jest opakowaniem otaczającym logger.trace . Ale poziom loggera jest ERROR, więc logger.trace nie zarejestruje swojej wiadomości do appenders loggera .

Poprawka polega na zmianie logger.trace na logger.error w treści errorLogger .

Roland Maio
źródło