我知道这是一个非常抽象的问题,但我只是不知道从哪里开始/如何开始。
我在我的应用程序中使用bunyan作为一个日志库。以下是用于记录某些内容的示例语法:
const log = bunyan.createLogger({...});
log.info(...);
log.error(...);我想创建某种包装器,以便每次调用log.<something>()时,它都会执行我的模块中的功能。具体地说,我想用log.<something>()生成的对象做一个curl请求。
我研究了messina和gelf-stream,它们是bunyan的包装器,但我并没有真正发现任何处理日志事件的特定代码,或者任何可以为我提供实现我的想法的示例的代码。
我在考虑将事件发射器添加到bunyan中,以便在我的模块中侦听,但这需要我使用库的分支,而我不想这样做。所以,现在我没有主意了。
发布于 2017-08-11 19:34:21
您可以通过创建writeable stream来扩展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 documentation中阅读有关流的更多信息
https://stackoverflow.com/questions/45633133
复制相似问题