2015-10-15 30 views
9

Szukałem w najlepszych systemów rejestrowania węzła: npmlog, log4js, bunyan i winston i postanowił wykorzystać winston za posiadanie najbardziej npm miesięczne pobieranie.Jak rejestrować obiekty i tablice JavaScript w Winston, jak robi to plik console.log?

Co chcę skonfigurować to niestandardowy rejestrator, który będę mógł używać w środowisku programistycznym z logger.debug(...), które nie będzie rejestrować niczego w środowisku produkcyjnym. Pomoże mi to, gdy będę w środowisku programistycznym, nie będę musiał nic pisać, ponieważ zobaczę wszystkie wyniki.

To co mam teraz:

var level = 'debug'; 
if (process.env.NODE_ENV !== 'development'){ 
    level = 'production'; // this will never be logged! 
} 

var logger = new winston.Logger({ 
    transports: [ 
    // some other loggings 
    new winston.transports.Console({ 
     name: 'debug-console', 
     level: level, 
     prettyPrint: true, 
     handleExceptions: true, 
     json: false, 
     colorize: true 
    }) 

    ], 
    exitOnError: false // don't crush no error 
}); 

Problem pojawia się, gdy próbuję się zalogować JavaScript Object lub JavaScript Array. Z wersją Object muszę wykonać toJSON(), a dla Array potrzebuję najpierw JSON.stringify(), a następnie JSON.parse().

To nie jest miłe napisać cały czas to metody, po prostu coś, co chcę zalogować. Co więcej, nie jest to nawet przyjazne dla zasobów, ponieważ te metody formatowania muszą być wykonane zanim logger.debug() zorientuje się, że jest na etapie produkcji i że nie powinien logować go w pierwszej kolejności (w zasadzie analizuje argumenty przed wywołaniem funkcji). Po prostu podoba mi się, jak stary-fashined console.log() rejestruje obiekty i tablice JavaScript.

Teraz, pisząc to pytanie, odkryłem, że istnieje sposób opisywania custom format dla każdego obiektu Winston transports. Czy to sposób na to, czy jest jakiś inny sposób?

Odpowiedz

6

spróbuj zmienić parametr prettyprint do

prettyPrint: function (object){ 
    return JSON.stringify(object); 
} 
1

Moja rada jest taka, aby napisać własną poboru na górze Winston że ma metodę wygoda dla drukowania obiektów do debugowania.

Można również spojrzeć na tę odpowiedź za podpowiedź, jak można opracować metodę.

https://stackoverflow.com/a/12620543/2211743

3

pomocą wbudowanej funkcji node.js util.format do konwersji obiektów na łańcuchy w taki sam sposób, console.log robi.

3
logger.log("info", "Starting up with config %j", config); 

Winstons używa wbudowanej biblioteki utils.format. https://nodejs.org/dist/latest/docs/api/util.html#util_util_format_format_args

+0

podać jakieś wyjaśnienia na odpowiedź, dlaczego to działa tak lub co PO robi źle. Wklejanie kodu w taki sposób zostanie oznaczone. –

+0

Najlepsze rozwiązanie, jakie tu widziałem. Korzysta z istniejącego interfejsu api rejestratora i drukuje wszystko ładnie. –