Как добавить метку времени в журналы с помощью Node.библиотека js Уинстон?
Я хочу добавить метку времени в журналы. Каков наилучший способ достичь этого?
7 ответов
Я сам занимался тем же вопросом. Есть два способа сделать это.
при включении Winston обычно по умолчанию добавляется транспорт консоли. Чтобы получить метки времени для работы в этом случае по умолчанию, мне нужно было либо:
- удалите транспорт консоли и добавьте еще раз с параметром timestamp.
- создайте свой собственный объект 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})
]
});
некоторые другие параметры для консольного транспорта можно найти здесь:
- level: уровень сообщений, которые должен регистрировать этот транспорт (по умолчанию "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.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.timestamp({format:'MM-YY-DD'})
вы можете использовать встроенный util и навсегда для достижения регистрации с timestap для вашего сервера nodejs. При запуске сервера добавьте вывод журнала как часть параметра:
forever start -ao log/out.log server.js
и затем вы можете написать util на своем сервере.js
сервер.js
var util = require('util');
util.log("something with timestamp");
выход будет выглядеть примерно так.файл журнала:
выход.log
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 и т. д. В качестве аддона ваши файлы журнала будут красочными на основе уровня журнала [трассировка, информация, отладка, ошибка, фатальная];)
log4js переопределит вашу консоль.log это настраиваемый параметр теперь в 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 подробности