Оболочка над буньянской библиотекой

Я знаю, что это очень абстрактный вопрос, но я просто не знаю, где и как начать.

Я использую Bunyan в качестве библиотеки журналов в моем приложении. Это пример синтаксиса для регистрации чего-либо:

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

Я хочу создать какую-то обертку, чтобы каждый раз log.<something>() называется, он будет выполнять функциональность из моего модуля. В частности, я хочу сделать curl запрос с объектом, произведенным log.<something>(),

Я искал Мессину и Гельфстрим, которые обертывают вокруг bunyan но я на самом деле не обнаружил какой-либо конкретный код, который обрабатывает события регистрации или что-нибудь, что даст мне пример того, как реализовать мою идею.

Я думал о добавлении источников событий в bunyan что я могу слушать в моем модуле, но это потребует от меня моего форка библиотеки, и я не хочу этого делать. Итак, теперь у меня нет идей.

1 ответ

Вы можете расширить функциональность 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.

Другие вопросы по тегам