Ведение журнала Node.js

177

Есть ли какая-нибудь библиотека, которая поможет мне обрабатывать регистрацию в моем приложении Node.Js? Все, что я хочу сделать, это я хочу записать все журналы в файл, а также мне нужны опции, такие как выкатывание файла после определенного размера или даты.


Я включил log4js im, пытаясь сохранить все детали конфигурации в одном файле и использовать только методы в других файлах приложения для простоты обслуживания. Но это не работает, как ожидалось. Вот что я пытаюсь сделать

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

Но это не работает. Что-то не так в этом?

SYV
источник
1
log4js кажется нормальным Вы неправильно установили уровень ошибки. это должно быть: logger.setLevel (log4js.levels.ERROR);
Боклуций,

Ответы:

196

Winston - довольно хорошая библиотека журналов. Вы можете записывать журналы в файл, используя его.

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

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
@eeverone, кажется, что Уинстон снова поддерживается ... github.com/flatiron/winston/network
Daithí
Просто быстрое примечание: вызовите logger.cli () в приведенном выше примере для цветного вывода командной строки.
Дункан
1
Winston не позволяет определять свою конфигурацию и читать из файла .json. Плохой дизайн, имо.
мин. В
59

Scribe.JS легкий регистратор

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

  • Сохраняет файл, упорядоченный по пользователю, дате и уровню
  • Дает вам хороший вывод (мы все любим это)
  • Простой в использовании HTML-интерфейс

Я надеюсь, что это помогает вам.

Демо онлайн

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

Безопасный веб-доступ к журналам

A

Печатает довольно текст на консоли тоже!

A

Веб доступ

A

Github

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

Мэтью Курьян
источник
5
эта библиотека больше не поддерживается: github.com/bluejamesbond/…
Саймон Мейзель
30

Log4js - одна из самых популярных библиотек журналов для приложения nodejs.

Он поддерживает много интересных функций:

  1. Цветная консольная регистрация
  2. Замена функций console.log узла (необязательно)
  3. Аппендер файлов, с прокруткой журнала в зависимости от размера файла
  4. SMTP, GELF, hook.io, Loggly appender
  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 ('ERROR');" вызывает проблему. Я не понимаю, почему, но когда я установил его на что-либо, кроме «ВСЕ», ничего не печатается в файле. Я немного покопался и изменил твой код. Это работает нормально для меня. Я создал два файла.

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», я вижу только «ERROR message» в файле test.log. Если я изменю уровень на «TRACE», тогда обе строки будут напечатаны в test.log.

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

Winston - хороший выбор для большинства разработчиков. Я давно пользуюсь Уинстоном. Недавно я использовал 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
}));

Я надеюсь, что это помогает кому-то управлять своими журналами !!

vinesh
источник
1
Это все еще работает, однако после обновления winston до v3 вы получаете предупреждение: «Papertrail - это устаревший транспорт winston. Рассмотрите возможность обновления». Есть обновление для транспорта в настоящее время выдающимся.
Джим Джимсон
2

Модуль 'nodejslogger' может быть использован для простой регистрации. Он имеет три уровня регистрации (INFO, ERROR, 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 . Но уровень логгера - ОШИБКА, поэтому logger.trace не будет регистрировать свое сообщение для регистраторов логгера .

Исправление состоит в том, чтобы изменить logger.trace на logger.error в теле errorLogger .

Роланд Майо
источник