2015-10-15 53 views
9

我正在查看頂級節點日誌記錄系統:npmlog,log4js,bunyanwinston,並決定使用winston來獲得每月下載次數最多的npm如何在console.log中記錄winston中的JavaScript對象和數組?

我想要設置的是自定義記錄器,我可以在開發環境中使用logger.debug(...),它不會在生產環境中記錄任何內容。這會幫助我,所以當我在開發環境中時,我不需要寫任何東西,因爲我會看到所有的輸出。

這是我現在有:當我試圖登錄的JavaScript Object或Javascript Array發生

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 
}); 

問題。與Object,我需要做toJSON(),併爲Array我需要第一個JSON.stringify(),然後JSON.parse()

把所有這些方法都寫下來,記錄下我想要的東西並不好。此外,它甚至不是資源友好的,因爲在logger.debug()意識到它在生產之前需要執行這些格式化方法,並且它不應該首先記錄它(基本上,它是在函數調用之前評估參數)。我只是喜歡多舊的時髦console.log()記錄JavaScript對象和數組。

現在,當我寫這個問題時,我發現有一種方法可以爲每個winston transports對象描述custom format。這是做的方式,還是有其他方式?

回答

6

嘗試改變prettyPrint參數

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

使用內置的Node.js功能util.format到你的對象轉換爲字符串以相同的方式,console.log一樣。

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

Winstons使用內置的utils.format庫。 https://nodejs.org/dist/latest/docs/api/util.html#util_util_format_format_args

+0

提供一些解釋給你的答案,爲什麼它的工作原理或OP做錯了什麼。只是像這樣的代碼粘貼被標記。 –

+0

我在這裏看到的最佳解決方案。使用現有的記錄器api並打印一切。 –

相關問題