Я использую Winston в Node.js для ведения журнала. Я знаю, что я могу добавлять метаданные индивидуально к каждому сообщению журнала, но есть способ указать набор метаданных по умолчанию, который будет добавлен к каждому сообщению журнала (например, имя приложения), поскольку я не хочу указывать его каждый раз Мне нужно отправить сообщение журнала.Node.js: Winston: Могу ли я добавлять метаданные по умолчанию ко всем сообщениям журнала
ответ
Там нет встроенный способ сделать это, но вы определенно можете добавить его самостоятельно - вот как:
Во-первых, настроить регистратор, как обычно. Например:
var logger = new (winston.Logger)({
"exitOnError" : true,
"transports" : [
new (winston.transports.Console)({ "colorize" : true, "level" : "silly", "silent" : false, "handleExceptions" : false }),
]
});
Затем переопределить метод журнала() (это всегда вызывается с помощью методов уровня - logger.foo()
фактически называет logger.log('foo')
.)
logger.log = function(){
var args = arguments;
if(args[2]) args[3] = args[2];
args[2] = {
"foo" : "bar"
}
winston.Logger.prototype.log.apply(this,args);
}
Все, что я делаю выше делает это так когда вызывается logger.log()
, вместо этого он вызывает вышеуказанный метод, который добавляет метаданные (в данном случае объект, содержащий ключ foo
). Затем он вызывает метод Logger.log Winston из соответствующего контекста.
Приведенный выше код будет в модуле вы создаете, в нижней части просто экспортировать регистратор:
module.exports = logger;
и импортировать модуль регистратора вместо модуля Уинстона в ваших вспомогательных классов.
var logger = require('./logger.js');
Надежда, что помогает!
Thanks Jesse :) –
Примечание: это приведет к перезаписыванию любых метаданных, заданных в инструкции журнала. Вы можете использовать '_.defaults()' подчеркивания() 'для увеличения, или вы можете добавить проверку для args [2] и не перезаписывать ее, если она существует, чтобы обойти это. – Jesse
Вместо перезаписи аргументов просто добавьте их: logger.log = function() { var args = arguments; if (args [2]) { args [2] .foo = "bar" } winston.Logger.prototype.log.apply (это, args); } – harryBundles
Другой вариант с выходом более как log4j (ы):
Существует а (в настоящее время незарегистрированные) свойство «метка» в транспорте консоли, которая будет добавить метку к выходу (JSon или линии):
var _ = require('lodash');
var winston = require('winston');
var path = require('path');
var baseDir = path.resolve(__dirname, '..');
// SETUP WINSTON LOGGER
var container = new winston.Container();
container.add("exception", {
console: {
handleExceptions: true,
timestamp: true,
label: "EXCEPTION",
colorize: true
}
});
container.get("exception").exitOnError = false;
var keys = [];
module.exports = function(filename) {
var label = path.relative(baseDir, filename);
if (!_.contains(keys, label)) {
container.add(label, {
console: {
handleExceptions: false,
level: 'debug',
timestamp: true,
label: label,
colorize: true
}
});
keys.push(label);
}
var logger = container.get(label);
logger.exitOnError = false;
return logger;
};
И в других модулях требуют это так:
var logger = require('./logger')(__filename);
Пример вывода:
2014-07-23T07:05:27.770Z - info: [config/config.js] .......
Я нашел лучший способ, используя util-extend на основе того, что я читал на this blog. Он будет добавлять данные во всех случаях, которые я нашел полезными для ловушки logger.info vs logger.log («info», message) и не перезаписывать ваши другие аргументы.
logger.log = function(){
var args = arguments;
var level = args[0];
var newArgs = {
foo: "bar",
baz: "abc"
};
var originalMeta = args[2] || {};
args[2] = extend(originalMeta, newArgs);
winston.Logger.prototype.log.apply(this,args);
};
Будет выводиться в консоли и в ваших журналах.
Для Уинстона v2 (см комментариев)
Существует в настоящее время rewriters
, которые документально и официальным способ сделать это:
logger.rewriters.push(function(level, msg, meta) {
meta.app = 'myApp';
return meta;
});
Будет ли добавить свойство app
каждые метаданные происходят Повсеместно это регистратор.
Вы также можете объявить его при создании регистратора:
new (winston.Logger)({
level: config.log[file].level,
rewriters: [
(level, msg, meta) => {
meta.app = 'myApp';
return meta;
}
],
transports: [
/*your transports*/
]
});
Этот ответ является более актуальным и официальным. – shankshera
Должен быть правильный ответ –
winston v3, похоже, устраняет возможность мутации метаданных. Это означает, что @Jesse является предпочтительным решением для winston v3 & +, если вы хотите добавить метаданные. Если выходной журнал является строкой, а не JSON, пользовательский формат может выполнять задание (cf github.com/winstonjs/winston/issues/1140) –
- 1. Как добавить строку ко всем сообщениям журнала
- 2. Добавление временных меток ко всем сообщениям консоли
- 3. Как установить уровень журнала в Winston/Node.js?
- 4. Могу ли я добавлять пользовательские метаданные в файлы?
- 5. Заголовок журнала в winston?
- 6. Node.js/winston - Можно ли добавить журнал?
- 7. Wordpress & SQL: добавление настраиваемого поля ко всем сообщениям
- 8. CSS Укладка не применяется ко всем сообщениям в приложении Rails
- 9. Как я могу ограничить файлы журнала winston конкретным номером
- 10. Несколько файлов журнала с Winston?
- 11. restfb получить все комментарии ко всем сообщениям с конкретной даты
- 12. Доступ ко всем sms-сообщениям на устройстве в Smartface
- 13. WordPress Bulk category добавить ко всем сообщениям с MySQL
- 14. Facebook комментарии особенность есть комментарии ко всем сообщениям.
- 15. Node.js Winston logging - exitOnError
- 16. Winston Неправильная конфигурация журнала
- 17. Является ли хорошей практикой добавлять префиксы ко всем классам css?
- 18. Могу ли я отклонить анонимный доступ ASP.NET ко всем файлам?
- 19. Могу ли я применить атрибут ко всем членам пространства имен?
- 20. Как добавить категорию ко всем сообщениям с помощью SQL-запроса?
- 21. как добавить новое значение журнала ко всем операторам ведения журнала
- 22. Уровень журнала winston/скрыть уровни журнала
- 23. Как добавить пользовательскую функцию php ко всем страницам по умолчанию
- 24. Node.js Winston elge logger
- 25. Node.js Winston logging
- 26. Применить стиль ресурса по умолчанию ко всем DataGridTextColumns
- 27. Winston регистратор делает журналы файл по умолчанию
- 28. Должен ли я привязывать Adwords ко всем профилям Analytics?
- 29. Как добавить параметры Google Analytics по умолчанию ко всем кнопкам?
- 30. Socket.IO & Node.js - Broadcasting ко всем комнатам данный пользователь присоединился
Существует теперь документированы способ сделать это, увидеть мой ответ. – DrakaSAN