簡體   English   中英

NodeJs將所有process.stdout捕獲到文件

[英]NodeJs Capture All process.stdout to File

我正在尋找一種方法來獲取所有process.stdout並將其管道傳輸到日志文件,我有以下內容:

import fs from 'fs';
let logFile = fs.createWriteStream('./test.log', {
  encoding: 'utf8',
  flags   : 'a'
});
process.stdout.pipe(logFile);

但是,它似乎仍會將所有stdout吐到控制台,並且日志文件中沒有任何內容(盡管正在創建中)。

我寧願程序寫到stdout並讓調用node的過程決定如何處理輸出:

node server | tee test.log

這有一些好處:

  • 不會將您的代碼耦合到日志記錄基礎架構
  • 寫入日志時不會鎖定文件(例如,每當您要旋轉日志時都需要重新啟動進程-對服務器不利)

並且避免了非常嚴重的缺點:

  • 您不必猴子補丁任何可能在應用程序中其他地方產生嚴重副作用的核心節點(或與執行相同操作的另一個庫沖突)

我認為這是行不通的,因為process.stdout是無法通過管道傳輸的寫流,盡管我不確定。 我所做的工作是下面的示例,在該示例中,我用新的可寫流覆蓋了stdout,該可寫流具有_write方法,該方法會調用文件流的write

var fs = require('fs');
var writeStream = fs.createWriteStream('./test.log', {
  encoding: 'utf8',
  flags: 'w'
});

process.stdout = require('stream').Writable();
process.stdout._write = function(chunk, encoding, callback) {
    writeStream.write(chunk, encoding, callback);
};

console.log('test from console.log');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM