拦截控制台日志到文件 Nodejs

Woo*_*der 0 html javascript node.js npm console.log

我正在使用 NodeJs 开发游戏,并意识到访问旧console.log输出将非常有帮助。机制和计算变得相当复杂,以后可以访问它们以搜索并对其进行一些数据分析以找到我的修改器(战斗机制)的正确值会很好。同时,我也想console.log在控制台中看到。


我知道这对于常规的 javascript 是不可能的,(请参阅This),但我希望 npm 有一些方法来拦截日志并将它们记录到服务器上的文件中。有什么想法吗?

Mau*_*Edo 7

同时记录到 stdout 和文件的 NPM 选项可以是Winston。Winston 是一个日志记录库,允许您定义自己的记录器,指定它们的传输(传输是您如何处理这些日志行)。在您的情况下,您可以定义一个具有两个传输、标准输出和日志文件的记录器。示例(受Winston 文档启发):

const winston = require('winston');

let logger = new (winston.Logger)({
    transports: [
        new (winston.transports.Console)(),
        new (winston.transports.File)({ filename: 'somefile.log' })
    ]
});

logger.info('hello, world!');
Run Code Online (Sandbox Code Playgroud)

如果您运行上面的代码,您将在控制台和somefile.log.

  • 温斯顿可以从 console.log() 捕获日志吗? (11认同)

jes*_*ssh 5

您可以像这样拦截 console.log

var cl = console.log

console.log = function(...args){
  // your custom logging logic here
  cl.apply(console, args)
}
Run Code Online (Sandbox Code Playgroud)