Подтвердить что ты не робот

Как добавить timestamp в журналы с помощью библиотеки Node.js Winston?

Я хочу добавить timestamp в журналы. Каков наилучший способ достичь этого?

4b9b3361

Ответ 1

Я имел дело с тем же вопросом. Я мог сделать это двумя способами.

Когда вы включаете Winston, обычно по умолчанию добавляется транспорт Консоли. Чтобы получить временные метки для работы в этом случае по умолчанию, мне нужно было либо:

  • Удалите консольный транспорт и добавьте снова с параметром отметки времени.
  • Создайте свой собственный объект Logger с параметром timestamp, установленным в true.

Первое:

var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {'timestamp':true});

Второй и более чистый вариант:

var winston = require('winston');
var logger = new (winston.Logger)({
    transports: [
      new (winston.transports.Console)({'timestamp':true})
    ]
});

Некоторые из других вариантов транспорта Консоли можно найти здесь:

  • Уровень
  • : уровень сообщений, которые должен регистрировать этот транспорт (по умолчанию "debug" ).
  • silent: логический флаг, указывающий, следует ли подавлять вывод (по умолчанию false).
  • colorize: Boolean flag, указывающий, следует ли раскрасить результат (по умолчанию false).
  • timestamp: Boolean flag, указывающий, следует ли нам добавлять выходные данные с отметками времени (по умолчанию false). Если функция указана, вместо временных меток будет использоваться ее возвращаемое значение.

Ответ 2

Выше ответы не спомогли мне. Если вы пытаетесь добавить метку времени в свои журналы, используя последнюю версию Winston - 3.0.0-rc1, это сработало как прелесть:

    const {transports, createLogger, format} = require('winston');

    const logger = createLogger({
        format: format.combine(
            format.timestamp(),
            format.json()
        ),
        transports: [
            new transports.Console(),
            new transports.File({filename: 'logs/error/error.log', level: 'error'}),
            new transports.File({filename: 'logs/activity/activity.log', level:'info'})
        ]
    });

Я использовал "format.combine()". Поскольку мне нужна была метка времени для всех моих транспортов, я добавил опцию форматирования в createLogger, а не внутри каждого транспорта. Мой вывод на консоль и на файл (activity.log) выглядит следующим образом:

{"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"}

Мы можем добавить форматирование к этой отметке времени в "format.combine()", как обычно, используя:

format.timestamp({format:'MM-YY-DD'})

Ответ 3

Вы можете использовать встроенные util и forever для достижения регистрации с помощью timestap для ваш сервер nodejs. Когда вы запускаете сервер, добавьте выход журнала как часть параметра:

forever start -ao log/out.log server.js

И затем вы можете написать утилиту на своем сервере server.js

server.js

var util = require('util');
util.log("something with timestamp");

Результат будет выглядеть примерно так: out.log файл:

out.log

15 Mar 15:09:28 - something with timestamp

Ответ 4

Мы можем сделать это также

var winston = require('winston');
    const { createLogger, format, transports } = require('winston')
    var config = require('../configurations/envconfig.js');

    var loggerLevel = process.env.LOGGERLEVEL ||  config.get('LOGGERLEVEL');

    var logger = winston.createLogger({ format: format.combine(
            format.timestamp({
                format: 'YYYY-MM-DD HH:mm:ss'
            }),
            format.printf(info => '${info.timestamp} ${info.level}: ${info.message}'+(info.splat!==undefined?'${info.splat}':" "))
        ), 
        transports: [
            new (winston.transports.Console)({ level: loggerLevel }),
           ]
    });
    module.exports = logger;

Ответ 5

Хотя я не знаю о winston, это предложение. Я использую log4js для ведения журнала, и мои журналы по умолчанию выглядят как

[2012-04-23 16:36:02.965] [INFO] Development - Node Application is running on port 8090
[2012-04-23 16:36:02.966] [FATAL] Development - Connection Terminated to  '127.0.0.1' '6379'

Разработка - это среда моего процесса node, а [INFO | FATAL] - уровень журнала

Поддержание различных профилей для ведения журнала возможно в log4js. У меня есть профиль разработки и производства. Кроме того, существуют такие типы журналов, как roll file appender, консольный appender и т.д. В качестве аддона ваши файлы журналов будут красочными на основе уровня журнала [Trace, Info, Debug, Error, Fatal];)

log4js переопределит ваш console.log Теперь это настраиваемый параметр в 0.5 +

Ответ 6

мы могли бы использовать консольную печать для добавления отметки времени и уровня журнала в существующую консоль: require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')

Подробнее о https://github.com/starak/node-console-stamp

Ответ 7

Иногда формат timestamp по умолчанию может быть вам не удобен. Вы можете переопределить его с помощью своей реализации.

Вместо

var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
  new (winston.transports.Console)({'timestamp':true})
]
});

вы можете написать

var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
  new (winston.transports.Console)({
     'timestamp': function() {
        return <write your custom formatted date here>;
     }
  })
]
});

Подробнее о https://github.com/winstonjs/winston#custom-log-format

Ответ 8

Другое решение заключается в том, чтобы поместить регистратор в файл, который экспортирует некоторые функции, такие как logger.info(), logger.error() и т.д., Затем вы просто передаете дополнительный ключ для отправки в каждый журнал сообщений.

loggerService.js

const logger = winston.createLogger({ ... })

function handleLog(message, level) {
  const logData = {
    timestamp: Date.now(),
    message,
  }

  return logger[level](logData)
}

function info(message) {
  handleLog(message, 'info')
}

function error(message) {
  handleLog(message, 'error')
}

function warn(message) {
  handleLog(message, 'warn')
}

module.exports = {
  info,
  error,
  warn
}

независимо-file.js

const logger = require('./services/loggerService')

logger.info('Hello World!')

YOUR-log.log

{"timestamp":"2019-08-21 06:42:27","message":"Hello World!","level":"info"}