2017-08-11 48 views
0

我知道這是一個非常抽象的問題,但我不知道從哪裏開始。bunyan日誌庫的包裝

我在我的應用程序中使用bunyan作爲日誌記錄庫。這是記錄一些樣本語法:

const log = bunyan.createLogger({...}); 
log.info(...); 
log.error(...); 

我想創建某種包裝,使每一次log.<something>()被調用時,它會從我的模塊執行的功能。具體來說,我想要log.<something>()產生的對象請求curl

我一直在尋找到messinagelf-stream這是包裝器bunyan,但我真的沒有發現,處理記錄事件或任何東西,這將使我的如何實現我的想法的例子任何特定代碼。

我正在考慮添加事件發射器到bunyan,我可以在我的模塊中偵聽,但這將需要我到我的叉的叉,我不想那樣做。所以,現在我沒有想法了。

回答

2

您可以通過創建一個writeable stream延長本仁的功能:

const bunyan = require("bunyan"), 
     stream = require("stream"); 

class MyStream extends stream.Writable { 

    /** 
    * When we have a record from bunyan 
    */ 
    write(record) { 
      console.log("-----> ", record); 
      return true; 
    } 

} 

/** Options for the bunyan instance */ 
const options = { 
    name : "my-logger", 
    serializers : bunyan.stdSerializers, 
    level : "trace", 
    streams : [ 
      { type : "stream", stream : process.stdout, level : "trace" }, 
      { type : "raw", stream : new MyStream(), level : "trace" } 
    ] 
}; 

/** Create the bunyan logger */ 
const log = bunyan.createLogger(options); 

log.info({ foo: "bar" }, "test"); 

這將輸出:

{"name":"my-logger","hostname":"localhost","pid":68694,"level":30,"foo":"bar","msg":"test","time":"2017-08-11T11:31:40.136Z","v":0} 
-----> { name: 'my-logger', 
    hostname: 'localhost', 
    pid: 68694, 
    level: 30, 
    foo: 'bar', 
    msg: 'test', 
    time: 2017-08-11T11:31:40.136Z, 
    v: 0 } 

您可以替換任何你想到的write(record) { ... }方法的代碼,處理日誌行本身。

您還可以閱讀更多關於bunyan documentation