2015-05-10 83 views
2

有無論如何寫一個原型函數,或者只要調用console.log就可以運行的函數? (並抓住console.log參數)。我的基於網絡的遊戲服務器的容量約爲100 KB,並且在我的代碼中有數百個console.log。我很樂意使用控制檯日誌數據,並稍後在基於Web的管理面板中使用這些信息。我想使用nodejs和FS。寫入文件是沒有問題的,我知道該怎麼做,但只是抓住console.log就是問題所在。任何想法?如何擴展console.log?

+1

你將不得不覆蓋'控制檯。 log'。爲什麼不直接使用'console.log'來代替'console.log'中的函數呢? – PHPglue

+0

@ PHPglue這是否意味着用一個新函數搜索和替換每個'console.log(e)'? –

+0

然後覆蓋它。 – PHPglue

回答

4

只需用自己的函數替換console.log,這樣

// Store the original version, so that you can fall back to it 
var originalLogger = console.log, 
    fs = require("fs"), 
    writeStream = fs.createWriteStream("logs.txt"); 

console.log = function() { 

    // Do your custom logging logic 
    for (var i = 0; i < arguments.length; i++) { 
     writeStream.write(arguments[i]); 
    } 

    // You can still call the original `console.log`, with all the `arguments` 
    originalLogger.apply(this, arguments); 
} 

console.log("Welcome"); 
+0

這很花哨。不知道你會爲我寫出來。謝謝你[非常感謝。](http://i.gyazo.com/f6c0bb743bf4cfb1660e6819e64b776f.png)我肯定會擴展並添加到它現在:D –

+1

@NiCkNewman你已經在第6行需要'fs'所以。 ,你不必在第13行再次這樣做:-) – thefourtheye

1

您可以重設的console.log到您的自定義日誌功能,演示代碼:

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

var l = fs.createWriteStream('abc'); 
console.log = function() { 
    var args = Array.prototype.slice.call(arguments) 
    l.write(util.format.apply(util, args)); 
    l.write('\n'); 
}