Node.js Ведення журналів


177

Чи є бібліотека, яка допоможе мені вести журнал у моєму додатку Node.Js? Все, що я хочу зробити, це те, що я хочу записати всі журнали у файл, а також мені потрібні такі параметри, як розгортання файлу після певного розміру чи дати.


Я включив log4js, намагаючись зберегти всі деталі конфігурації в одному файлі та використовую лише методи в інших файлах додатків для зручності обслуговування. Але це не працює, як очікувалося. Ось що я намагаюся зробити

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;

Я включив цей файл до інших файлів і спробував

log.error ("Hello Error Message");

Але це не працює. Чи в цьому щось не так?


1
log4js здається нормальним. ви неправильно встановили рівень помилки. це має бути: logger.setLevel (log4js.levels.ERROR);
Боклуцій

Відповіді:


196

Вінстон - це дуже гарна бібліотека лісозаготівлі. Ви можете записувати журнали у файл, використовуючи його.

Код виглядатиме приблизно так:

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;

Потім ви можете використовувати це так:

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

logger.info('log to file');


3
Я давно використовую Вінстон. Він набув баггі, і я накинув його на користь npmlog.
аеропорт

8
@everyone, здається, Вінстон знову підтримується ... github.com/flatiron/winston/network
Daithí

Лише коротка примітка: виклик logger.cli () у наведеному вище прикладі для кольорового виводу командного рядка.
Дункан

1
Вінстон не дозволяє визначати його конфігурацію та читати з файлу .json. Поганий дизайн, іммо.
мінімал

59

Scribe.JS Легкий лісоруб

Я переглянув багато лісорубів, і не зміг знайти полегшене рішення - тому вирішив зробити просте рішення, яке розміщується на github.

  • Зберігає файл, упорядкований за користувачем, датою та рівнем
  • Дає неабиякий результат (ми всі любимо це)
  • Простий у використанні інтерфейс HTML

Я сподіваюся, що це вам допоможе.

Демонстрація в Інтернеті

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

Безпечний доступ до веб-журналів

А

Друкує гарний текст на занадто великій консолі!

А

Доступ до Інтернету

А

Гітуб

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


5
ця бібліотека більше не підтримується: github.com/bluejamesbond/…
Simon Meusel

30

Log4js - одна з найпопулярніших бібліотек ведення журналів для програми nodejs.

Він підтримує багато цікавих функцій:

  1. Кольорова консольна реєстрація
  2. Заміна функцій console.log вузла (необов'язково)
  3. Додаток файлу з прокруткою журналу залежно від розміру файлу
  4. SMTP, GELF, kuk.io, Loggly придатник
  5. Багатопроцесорне додаток (корисно, коли у вас є робочі процеси)
  6. Журнал для з'єднання / експрес-серверів
  7. Налаштований макет / шаблони повідомлення журналу
  8. Різні рівні журналу для різних категорій журналу (деякі частини журналу додатків роблять DEBUG, інші - лише ПОМИЛКИ та ін.)

Приклад:

  1. Установка: npm install log4js

  2. Конфігурація ( ./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. Використання:

    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


6

"Logger.setLevel (" ПОМИЛКА ");" викликає проблему. Я не розумію, чому, але коли я встановлюю його на що-небудь, крім "ВСЕ", у файлі нічого не надрукується. Я трохи ткнувся і змінив ваш код. Для мене це добре працює. Я створив два файли.

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

Коли я запускаю "node logger.test.js", у файлі test.log я бачу лише "повідомлення про помилку". Якщо я зміню рівень на "TRACE", то обидва рядки друкуються на test.log.


2
logging.apache.org/log4j/1.2/manual.html Журналам можуть бути призначені рівні. Набір можливих рівнів, тобто: TRACE, DEBUG, INFO, WARN, ERROR та FATAL Запит на реєстрацію, як вважається, увімкнено, якщо його рівень перевищує або дорівнює рівню його реєстратора. В іншому випадку запит буде відключено.
Шон К.

3

Вінстон - це сильний вибір для більшості розробників. Я довго використовую Вінстон. Нещодавно я використовував winston with papertrail, який піднімає реєстрацію додатків на наступний рівень.

Ось приємний скріншот з їхнього сайту.

введіть тут опис зображення

Наскільки це корисно

  • ви можете керувати журналами з різних систем в одному місці. це може бути дуже корисно, коли у вас є два бекенд-комунікації і ви можете бачити журнали з обох на місці.

  • Логи живі. Ви можете бачити журнали Вашого виробничого сервера в режимі реального часу.

  • Потужний пошук та фільтр

  • ви можете створити сповіщення, щоб надсилати вам електронне повідомлення, якщо в журналі трапляється конкретний текст.

і ви можете знайти більше http://help.papertrailapp.com/kb/how-it-works/event-viewer/

Проста конфігурація , яка використовує winston, winston-expressі winston-papertrailвузол модулів.

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

Я сподіваюся, що це допомагає комусь керувати своїми журналами !!


1
Це все ще працює, проте після оновлення winston до v3 ви отримуєте попередження: "Papertrail - це застарілий транспорт Winston. Розгляньте можливість оновлення". Наразі є оновлення транспорту.
Джим Джімсон

2

Модуль 'nodejslogger' може використовуватися для простого ведення журналу. Він має три рівні ведення журналу (INFO, ПОМИЛКА, DEBUG)

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

D: Налагодження, I: Інформація, E: Помилка

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

Доступ до модуля можна отримати за адресою: https://www.npmjs.com/package/nodejslogger


0

Зауважте, що errorLogger - це обгортка навколо logger.trace . Але рівень реєстратора є ERROR так logger.trace не зареєструють своє повідомлення для реєстратора appenders «s.

Виправлення полягає в зміні logger.trace на logger.error в тілі errorLogger .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.