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



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

587   7  

7 ответов:

Я сам занимался этим вопросом. Есть два способа, которыми я смог это сделать.

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

  1. удалите консольный транспорт и добавьте снова с параметром timestamp.
  2. создайте свой собственный объект 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: логический флаг, указывающий, следует ли нам раскрашивать вывод (по умолчанию false).
  • метки: Логический флаг, указывающий, должны ли мы добавлять выходные данные с метками времени (по умолчанию false). Если функция указана, ее возвращаемое значение будет использоваться вместо временных меток.

выше ответы не работает для меня. В случае, если вы пытаетесь добавить метку времени в свои журналы, используя последнюю версию 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'})
        ]
    });

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

{"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.timestamp({format:'MM-YY-DD'})

вы можете использовать встроенный полезное и навсегда для достижения регистрации с timestap для вашего сервера nodejs. При запуске сервера добавьте вывод журнала как часть параметра:

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

и тогда вы можете написать util на своем сервере.js

сервер.js

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

вывод будет выглядеть примерно так, как обычно.файл журнала:

выход.журнал

15 Mar 15:09:28 - something with timestamp

хотя я не знаю Уинстона, это предложение. Я использую 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'

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

ведение различных профилей для ведения журнала возможно в log4js. Я имею профили развития & продукции. Также существуют типы регистраторов, такие как rolling file appender, console appender и т. д. В качестве аддона ваши лог-файлы будут красочными на основе уровня журнала [Trace, Info, Debug, Error, Fatal];)

log4js переопределит вашу консоль.журнал это настраиваемый параметр теперь в 0.5+

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

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;

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

вместо

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 для деталей

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

см.https://github.com/starak/node-console-stamp для деталей

Comments

    Ничего не найдено.