[英]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.