我是否可以配置console.log,以便将日志写入文件,而不是打印在控制台中?


当前回答

我只是建立了一个包来做这个,希望你喜欢它;) https://www.npmjs.com/package/writelog

其他回答

对于简单的情况,我们可以使用'>'和'2>&1'将标准输出(STDOUT)和标准错误(STDERR)流直接重定向到一个文件(例如,test.log)

例子:

// test.js
(function() {
    // Below outputs are sent to Standard Out (STDOUT) stream
    console.log("Hello Log");
    console.info("Hello Info");
    // Below outputs are sent to Standard Error (STDERR) stream
    console.error("Hello Error");
    console.warn("Hello Warning");
})();

节点test.js > test.log 2>&1 .log

根据POSIX标准,“输入”、“输出”和“错误”流由正整数文件描述符(0,1,2)标识,即stdin为0,stdout为1,stderr为2。

步骤1:'2>&1'将从2 (stderr)重定向到1 (stdout) 步骤2:'>'将从1 (stdout)重定向到文件(test.log)

大多数记录器是过量的,不支持console.log中的正确构建。因此我创建了console-log-to-file:

import { consoleLogToFile } from "console-log-to-file";
// or `const { consoleLogToFile } = require("console-log-to-file/dist/index.cjs.js")`

consoleLogToFile({
  logFilePath: "/log/default.log",
});

// all of your console.log/warn/error/info will work as it does and save to file now.

你也可以看看这个npm模块: https://www.npmjs.com/package/noogger

努格

简单直接……

改进安德烈斯·里奥里奥,处理任何数量的争论

var fs = require('fs');
var util = require('util');

var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;

console.log = function(...args) {
    var output = args.join(' ');
    log_file.write(util.format(output) + '\r\n');
    log_stdout.write(util.format(output) + '\r\n');
};

直接来自控制台的nodejs API文档

const output = fs.createWriteStream('./stdout.log');
const errorOutput = fs.createWriteStream('./stderr.log');
// custom simple logger
const logger = new Console(output, errorOutput);
// use it like console
const count = 5;
logger.log('count: %d', count);
// in stdout.log: count 5