簡體   English   中英

在bunyan采伐的圖書館的包裝

[英]Wrapper over bunyan logging library

我知道這是一個非常抽象的問題,但我不知道在哪里/如何開始。

我在我的應用程序中使用bunyan作為日志庫。 這是用於記錄內容的示例語法:

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

我想創建一些包裝器,以便每次調用log.<something>() ,它都會從我的模塊執行功能。 具體來說,我想用log.<something>()生成的對象做一個curl請求。

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

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

您可以通過創建可寫流來擴展bunyan的功能:

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文檔中閱讀有關流的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM