首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bunyan日志库上的包装器

bunyan日志库上的包装器
EN

Stack Overflow用户
提问于 2017-08-11 18:35:58
回答 1查看 686关注 0票数 2

我知道这是一个非常抽象的问题,但我只是不知道从哪里开始/如何开始。

我在我的应用程序中使用bunyan作为一个日志库。以下是用于记录某些内容的示例语法:

代码语言:javascript
复制
 const log = bunyan.createLogger({...});
 log.info(...);
 log.error(...);

我想创建某种包装器,以便每次调用log.<something>()时,它都会执行我的模块中的功能。具体地说,我想用log.<something>()生成的对象做一个curl请求。

我研究了messinagelf-stream,它们是bunyan的包装器,但我并没有真正发现任何处理日志事件的特定代码,或者任何可以为我提供实现我的想法的示例的代码。

我在考虑将事件发射器添加到bunyan中,以便在我的模块中侦听,但这需要我使用库的分支,而我不想这样做。所以,现在我没有主意了。

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 19:34:21

您可以通过创建writeable stream来扩展bunyan的功能:

代码语言:javascript
复制
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" );

这将输出:

代码语言:javascript
复制
{"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中阅读有关流的更多信息

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45633133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档