簡體   English   中英

txt 文件中的 Node.js console.log()

[英]Node.js console.log() in txt file

我還有一個問題( 最后一個問題)。 目前我正在處理一個 Node.js 項目,在這個項目中我有很多console.log() 函數。 到目前為止,這一切正常,但我也希望寫入控制台的所有內容寫入日志文件。 有人可以幫幫我嗎?

例如:

Console.log('The value of array position [5] is '+ array[5]);

在我的真實代碼中它有點多,但這應該給你一個想法。

謝謝希望。

只需像這樣在終端中運行腳本...

node script-file.js > log-file.txt

這告訴 shell 將命令node script-file.js的標准輸出寫入您的日志文件,而不是將其打印到控制台的默認值。

這稱為重定向,它非常強大。 假設您想將所有錯誤寫入一個單獨的文件...

node script-file.js >log-file.txt 2>error-file.txt

現在所有console.log都寫入log-file.txt ,所有console.error寫入error-file.txt

我會使用圖書館而不是重新發明輪子。 我在 npm 上尋找了一個log4j類型的庫,它想出了https://github.com/nomiddlename/log4js-node

如果要登錄到控制台和文件:

var log4js = require('log4js');
log4js.configure({
  appenders: [
    { type: 'console' },
    { type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
  ]
});

現在您的代碼可以創建一個新的記錄器

var logger = log4js.getLogger('cheese'); 

並在您的代碼中使用記錄器

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

您可以嘗試覆蓋內置的console.log來做一些不同的事情。

var originalLog = console.log;

console.log = function(str){
  originalLog(str);
  // Your extra code
}

但是,這會將originalLog放入主作用域,因此您應該嘗試將其包裝在函數中。 這稱為閉包,您可以 在此處閱讀有關它們的更多信息。

(function(){
   var originalLog = console.log;

  console.log = function(str){
  originalLog(str);
  // Your extra code
})();

要寫入文件,請參閱stackoverflow 問題,並以比我展示的方式更好地覆蓋console.log ,請參閱 結合這兩個答案將為您提供最佳解決方案。

const fs = require('fs');
const myConsole = new console.Console(fs.createWriteStream('./output.txt'));
myConsole.log('hello world');

這將創建一個輸出文件,其中包含可以通過console.log('hello world')內的console.log('hello world')觸發的所有輸出。

這是將console.log()輸出轉換為文本文件的最簡單方法。`

@activedecay 的答案似乎是要走的路。 但是,截至april 30th 2018 ,我遇到了該特定模型的問題(由於傳遞給.configure的對象結構,節點崩潰,這在最新版本中似乎不起作用)。 盡管如此,由於nodejs調試消息,我已經設法解決了更新的解決方案......

const myLoggers = require('log4js');

myLoggers.configure({
    appenders: { mylogger: { type:"file", filename: "path_to_file/filename" } },
    categories: { default: { appenders:["mylogger"], level:"ALL" } }
});
const logger = myLoggers.getLogger("default");

現在,如果您想登錄到所述文件,您可以像activedecay向您展示的那樣進行操作

logger.warn('Cheese is quite smelly.');
logger.info('Cheese is Gouda.');
logger.debug('Cheese is not a food.');

但是,這不會將任何內容記錄到控制台,而且由於我還沒有弄清楚如何在一個記錄器中實現多個 appender,您仍然可以實現舊的console.log();

PD:我知道這是一個有點舊的線程,OP的特定問題已經解決了,但既然我是為了同樣的目的來到這里,我不妨留下我的經驗,以幫助將來訪問此線程的任何人

只需編寫自己的日志函數:

function log(message) {
   console.log(message);
   fs.writeFileSync(...);
}

然后用log()替換所有現有的對console.log()調用。

暫無
暫無

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

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