Używam Winston w Node.js do rejestrowania. Wiem, że mogę dodawać metadane indywidualnie do każdej wiadomości dziennika, ale czy istnieje sposób na określenie domyślnego zestawu metadanych, które będą dodawane do każdej wiadomości dziennika (takiej jak nazwa aplikacji), ponieważ nie chcę jej określać za każdym razem Muszę wysłać wiadomość dziennika.Node.js: Winston: Czy mogę dodać domyślne dane meta do wszystkich komunikatów dziennika
Odpowiedz
Nie ma wbudowanego sposób to zrobić, ale na pewno można dodać go samodzielnie - oto jak:
Najpierw skonfigurować rejestrator jak zwykle. Na przykład:
var logger = new (winston.Logger)({
"exitOnError" : true,
"transports" : [
new (winston.transports.Console)({ "colorize" : true, "level" : "silly", "silent" : false, "handleExceptions" : false }),
]
});
Następnie zastąpić metodę log() (jest to zawsze nazywane metodami szczebla - logger.foo()
faktycznie nazywa 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);
}
Wszystko robię powyżej czyni go tak po wywołaniu logger.log()
zamiast tego wywołuje powyższą metodę, która dodaje metadane (w tym przypadku obiekt zawierający klucz foo
). Następnie wywołuje metodę Logger.log Winstona z właściwego kontekstu.
Powyższy kod będzie w module utworzonym, na dole po prostu wyeksportować rejestratora:
module.exports = logger;
i zaimportować moduł rejestratora zamiast modułu winston w klasach podrzędnych.
var logger = require('./logger.js');
nadzieję, że pomoże!
Thanks Jesse :) –
Uwaga: spowoduje to zastąpienie dowolnych metadanych określonych w wyciągu dziennika. Możesz użyć znaku podkreślenia '_.defaults()', aby go poprawić, lub możesz dodać sprawdzanie argumentów [2] i nie zastępować go, jeśli istnieje, aby ominąć to. – Jesse
Zamiast nadpisywać argumenty, wystarczy je dołączyć: logger.log = function() { var args = arguments; if (args [2]) { args [2] .foo = "bar" } winston.Logger.prototype.log.apply (this, args); } – harryBundles
Inną opcją o mocy bardziej jak log4j (ów):
Jest (obecnie nieudokumentowane) „etykieta” mienie w transporcie konsola która doda wytwórnię do wyjścia (json lub linia):
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;
};
oraz w innych modułów wymaga tak:
var logger = require('./logger')(__filename);
Przykład Wydajność:
2014-07-23T07:05:27.770Z - info: [config/config.js] .......
Znalazłem lepszy sposób korzystania z util-extend na podstawie tego, co przeczytałem na this blog. Będzie on dołączał dane we wszystkich przypadkach, które uważałem za przydatne do przechwytywania logger.info vs logger.log ("info", wiadomość) i nie zastąpią innych argumentów.
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);
};
Wypisze w konsoli i dziennikach.
Winston v2 (patrz komentarze)
Obecnie rewriters
, które są udokumentowane i oficjalny sposób, aby to zrobić:
logger.rewriters.push(function(level, msg, meta) {
meta.app = 'myApp';
return meta;
});
doda własność app
aby każdy metadanych będzie throught to rejestrator.
Można również zadeklarować przy budowie rejestratora:
new (winston.Logger)({
level: config.log[file].level,
rewriters: [
(level, msg, meta) => {
meta.app = 'myApp';
return meta;
}
],
transports: [
/*your transports*/
]
});
ta odpowiedź jest bardziej trafna i oficjalna. – shankshera
Powinna być poprawna odpowiedź –
Winston v3 wydaje się usuwać możliwość mutacji metadanych. Oznacza to, że @Jesse jest preferowanym rozwiązaniem dla winston v3 & +, jeśli chcesz dodać metadane. Jeśli logiem wyjściowym jest ciąg znaków, a nie JSON, niestandardowy format może wykonać zadanie (cf github.com/winstonjs/winston/issues/1140) –
- 1. Node.js/winston - Czy mogę dołączyć dziennik?
- 2. Wyłączanie komunikatów dziennika systemu Android dla wszystkich aplikacji
- 3. Jak wyprowadzić dane wyjściowe rejestratora Connect/Express do Winston?
- 4. Opis dziennika komunikatów ISO 8583
- 5. Winston: Jak zmienić format datownika
- 6. Formatowanie komunikatów dziennika jako drzewa
- 7. UIImage meta dane
- 8. dodać dziennika zdarzeń do rejestru
- 9. Czy mogę dodać dane do już serializowanej tablicy?
- 10. Wyświetlanie komunikatów dziennika błędów w dzienniku GTK
- 11. Dane meta pliku tekstowego
- 12. Winston: jak obracać dzienniki
- 13. Jak dodać wiele poziomów do pojedynczego transportu w Winston?
- 14. jak dodać meta pole do wordpress stron
- 15. Domyślne dane logowania do Virtuoso Conductor
- 16. Jak dodać znacznik czasu do pliku dziennika
- 17. Migracje Rails: załaduj domyślne dane
- 18. Jak mogę dodać prefiks trasy do wszystkich kontrolerów w Symfony2?
- 19. Jak dodać prefiks do komunikatów log4j (na poziomie obiektu)
- 20. Jak dodać niestandardową obsługę dziennika do Google App Engine?
- 21. jak dodać dane do ManyToManyField?
- 22. Gdzie mogę znaleźć domyślne szablony wszystkich typów wtyczek pól Grails?
- 23. Jak dodać i pobrać niestandardowe dane meta do pliku wideo w programie iOS?
- 24. Xcode - domyślne dodawanie nowych plików do wszystkich obiektów docelowych
- 25. Przekierowywanie danych wyjściowych do pliku dziennika przy użyciu pliku node.js
- 26. Jak zalogować Socket.io przez Winston?
- 27. Po wyświetleniu podejrzanych komunikatów o błędach w pliku dziennika
- 28. Clojure: Jak uzyskać meta-dane funkcji?
- 29. Czy mogę dodać skrypt debugowania do NPM?
- 30. Czy mogę dodać menedżera do wielostronnego związku?
Jest teraz udokumentowany sposób, aby to zrobić, zobacz moją odpowiedź. – DrakaSAN