2013-03-20 74 views
25

我正在用我的node.js應用程序使用winston日誌記錄並定義了文件傳輸。在我的代碼中,我使用logger.error,logger.warnlogger.info來記錄日誌。如何在Winston/Node.js中設置日誌級別?

我的問題是,我該如何指定日誌級別?是否有可以設置的配置文件和值,以便只記錄相應的日誌消息?例如,我希望日誌級別在我的開發環境中爲「信息」,但生產中爲「錯誤」。

回答

19

貌似有傳入的選項級別選項覆蓋here

從這個DOC:

var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)({ level: 'error' }), 
    new (winston.transports.File)({ filename: 'somefile.log' }) 
    ] 
}); 

現在,這些例子說明在選擇對象到控制檯運輸傳球水平。當您使用文件傳輸時,我相信您會傳遞一個選項對象,該對象不僅包含文件路徑,還包含關卡。

這應該導致這樣的:

var logger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.File)({ filename: 'somefile.log', level: 'error' }) 
    ] 
}); 

每那個文件夾,還要注意爲2.0,它暴露了執行setLevel方法在運行時更改。查看該文檔的使用日誌級別部分。

+1

bryanmac,感謝您的回覆,但我仍然不回答我的問題。讓我澄清一下。在我以前的工作中,我們使用了一個與winston非常相似的自定義日誌記錄模塊。該模塊依賴於設置日誌級別的配置文件中的條目。如果我們必須調試任何問題,我們會更改配置文件中的條目,以增加日誌的冗長度。但在其他時間,我們會將該級別設置爲最低級別以便僅記錄錯誤。溫斯頓可能會這樣嗎? – 2013-03-21 02:33:53

+1

上面的編程代碼可以從日誌文件中讀取以設置初始日誌記錄級別。現在,要在運行時從初始/默認級別更改,可以公開一個轉身並調用我提到的setLevel方法的API。這樣你就可以擁有一個讀取日誌級別的管理頁面並設置它。 – bryanmac 2013-03-21 04:42:51

+0

布賴恩,我打算接受你最初的回答+你的評論作爲我的問題的答案。謝謝。 – 2013-03-21 18:10:48

7

有在Winston 6個默認級別:傻= 0(最低),調試= 1,詳細= 2,信息= 3,警告= 4,誤差= 5(最高)

在創建記錄器傳輸,您可以指定日誌級別,如:

new (winston.transports.File)({ filename: 'somefile.log', level: 'warn' }) 

上面的代碼將日誌級別設置爲warn,這意味着sillyverboseinfo將無法​​輸出到somefile.log,而warndebugerror意志。

您也可以定義自己的水平:

var myCustomLevels = { 
    levels: { 
    foo: 0, 
    bar: 1, 
    baz: 2, 
    foobar: 3 
    } 
}; 

var customLevelLogger = new (winston.Logger)({ levels: myCustomLevels.levels }); 
customLevelLogger.foobar('some foobar level-ed message'); 

注意,最好是始終在自己的自定義級別6級預先限定的水平,萬一某處使用預定義的水平。

+0

陳,感謝您的回答。上面我接受了Bryan的回答。但你的也很有幫助。 – 2013-03-21 18:11:49

+3

抱歉,@Chen錯了。調試比verbose低。建議編輯。 – 2014-08-12 16:33:28

+0

@filsmick你是對的。當我編寫這個答案時,調試比冗長,但現在詳細較高。 – Chen 2014-08-14 03:38:14

3

您可以通過修改相應的運輸level屬性更改在運行時的日誌記錄級別:

var log = new (winston.Logger)({ 
    transports: [ 
     new (winston.transports.Console)({ level : 'silly' }) 
    ] 
}); 

... 

// Only messages with level 'info' or higher will be logged after this. 
log.transports.Console.level = 'info'; 

我想,它的工作原理類似文件,但我還沒有試過。

32
winston = require('winston'); 
: 
: 
winston.level = 'debug'; 

將設置日誌級別爲「調試」。 (使用winston 0.7.3測試)

+2

是的,這是正確的答案,其他人需要創建一個新的記錄器,並且不要調整由winston創建的現有默認記錄器的設置。 – 2014-08-01 03:06:53

0

如果您想要動態更改日誌級別。就像你需要在短時間內追蹤生產問題;然後恢復到錯誤日誌級別。您可以使用動態記錄器,只要您可以在網絡上公開服務https://github.com/yannvr/Winston-dynamic-loglevel

相關問題