Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哪个nodejs记录器具有运行时日志级别更改、纯文本/JSON支持和简单API_Javascript_Node.js_Logging - Fatal编程技术网

Javascript 哪个nodejs记录器具有运行时日志级别更改、纯文本/JSON支持和简单API

Javascript 哪个nodejs记录器具有运行时日志级别更改、纯文本/JSON支持和简单API,javascript,node.js,logging,Javascript,Node.js,Logging,我正在寻找nodejs日志库,它允许: 简单的日志记录-我希望能够调用log.debug('Something executed',objDump)或log.error('Got error',err),并将objDump打印出来并err包含在日志中(在出错的情况下作为JSON或使用堆栈跟踪),这样做的效果非常好。我需要一个非常简单的API来记录日志,以避免混淆util.formatmagic,并考虑是否应该使用%j或任何其他方法 运行时日志级别更改(我收到一个错误,希望将记录器切换到debu

我正在寻找nodejs日志库,它允许:

  • 简单的日志记录-我希望能够调用
    log.debug('Something executed',objDump)
    log.error('Got error',err)
    ,并将
    objDump
    打印出来并
    err
    包含在日志中(在
    出错的情况下作为JSON或使用堆栈跟踪)
    ,这样做的效果非常好。我需要一个非常简单的API来记录日志,以避免混淆
    util.format
    magic,并考虑是否应该使用
    %j
    或任何其他方法

  • 运行时日志级别更改(我收到一个错误,希望将记录器切换到
    debug
    模式,而不重新启动应用程序本身

  • 为用户登录纯文本,为日志收集器登录JSON

  • 将预定义元数据添加到每个日志语句(例如主机名、应用程序名、事务ID等)

我试过经典之作——温斯顿和班扬,虽然它们有很多特点,但它们也缺少上述的一些特点

例如,Winston可以通过重写器添加元数据,但当通过
logger.error('Got error,err)
记录错误时,根本不会记录错误本身。 Bunyan无法(AFAIK)以人类可读的格式登录,除非您使用其额外的CLI,我并不真正想要它

我还尝试了Bristol,这很有希望,但后来证明它不允许在运行时更改日志级别

反过来,Log4JS缺乏为每个日志语句设置元数据(AFAIK)


你能告诉我其他的库,或者在上面提到的库中做这些事情的方法吗?我肯定有这样一个库。我不敢相信我是那个想要日志库来做这些事情的人。

你试过调试吗?很简单,但可以完成这项工作
Bunyan可以在不使用CLI的情况下登录到人可读的。您可以通过为此创建类对象并以以下方式引用流中的对象来完成此操作:

var bunyan = require('bunyan');
function MyRawStream() {}
MyRawStream.prototype.write = function (rec) {
    console.log(rec.time.toISOString(),
                bunyan.nameFromLevel[rec.level],
                rec.msg);
}
var log = bunyan.createLogger({
    name:'play',
    streams: [
    {
        level: 'info',
        stream: new MyRawStream(),
        type: 'raw'
    }]
});
创建后,您可以使用:

log.info('hi...');
来测试…然后看起来像

2017-03-07T05:49:56.890Z info hi...
您还可以通过以下方式在日志中使用颜色,只需导入

var colors = require('colors/safe')
以及更改MyRawStream写入方法中的console.log选项:

console.log(colors.red('[%s]')+' '+colors.blue('%s')+': '+colors.green('%s'),
            rec.time.toISOString(),
            bunyan.nameFromLevel[rec.level],
            rec.msg);

您可以通过更改写入方法来相应地调整所有内容,但可能会对其他人有所帮助。可能是您正在寻找的(或者您已经发现了)

  • 简单日志记录
我想它能满足你的需要

  • 运行时的日志级别更改
这也是我在遇到这个问题之前一直在寻找的:

  • 为用户登录纯文本,为日志收集器登录JSON
以JSON格式打印,并为人类可读的打印提供单独的工具:

  • 向每个日志语句添加预定义元数据


它声称它是最快的:

我看到了debug,但它缺少太多的功能,我看不到将它用作真正的记录器。它还有这种令人恼火的printf格式:(所以感谢您的发布,但是
debug
对我来说不是一种方式。