【问题标题】:Redirect console.log output to file将 console.log 输出重定向到文件
【发布时间】:2016-08-09 07:05:44
【问题描述】:

这应该是一个微不足道的问题,但我似乎没有想到它。有没有什么简单的方法可以将我的所有console.log 输出重定向到一个文件? console.log 以一种很好的方式对提供的对象进行格式化,并且可以与不是普通的 JSON 对象的对象正确交互。

例如,如果我这样做

var myerr = new Error('There has been an error');
console.log(myerr);

我明白了

[Error: There has been an error.]

如果我只是这样做

process.stdout.write(JSON.stringify(myerr));

我明白了

{}

如果我这样做了

process.stdout.write(myerr.toString());

我明白了

Error: There has been an error

因此,如果我使用上述任何技巧循环其参数并将输出重定向到文件的函数覆盖我的console.log,则日志将不完全相同。

所以我想知道:console.log 在将对象输出到控制台之前如何处理它提供的对象?它只是在每个对象上调用.toString(),用[] 包装东西并将所有内容发送到process.stdout.write?还是它会进行其他类型的预处理?

【问题讨论】:

    标签: node.js file console.log


    【解决方案1】:

    这是使用 ES6 代理的另一种方法。大部分功劳归于https://2ality.com/2015/10/intercepting-method-calls.html

    function traceMethodCalls(obj)
    {
        return new Proxy(obj, {
            get(target, methodName, receiver) {
                // get origin method
                const originMethod = target[methodName];
    
                return function(...args) {
                    // write to file here
    
                    // call origin method
                    return originMethod.apply(this, args);
                };
            }
        });
    }
    
    console = traceMethodCalls(console);
    
    console.log("log");
    console.warn("warn");
    console.error("error");
    

    【讨论】:

      【解决方案2】:

      另一个对日志进行更精细控制的好方法是使用 winston。在此处查看文件传输:https://github.com/winstonjs/winston/blob/master/docs/transports.md#file-transport

      【讨论】:

        【解决方案3】:

        我认为使用 linux I/O 重定向的简单方法。 只需以这种方式运行您的应用程序:

        node app.js > log.txt
        

        您应用的所有输出消息都将重定向到 log.txt

        【讨论】:

          【解决方案4】:

          Console的代码如下:

          Console.prototype.log = function() {
            this._stdout.write(util.format.apply(null, arguments) + '\n');
          };
          

          你可以这样做

          const util = require('util');
          process.stdout.write(util.format.apply(null, arguments) + '\n');
          

          【讨论】:

          猜你喜欢
          • 2022-10-24
          • 2013-10-11
          • 2023-03-19
          • 2014-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-26
          • 2014-03-03
          相关资源
          最近更新 更多