2017-05-16 4 views

答えて

0

単純なアプローチは、データを記録し、また、ファイルシステムへの書き込みをあなたの関数を使用してコンソールにlog関数をオーバーライドすることです。ここで

が一般的な考え方です:

function attachFSLogger(filePath) { 
    // remember the old log method 
    const oldLog = console.log; // remove this line if you only want to log into the file 

    // override console.log 
    console.log = (...messages) => { 

    // log the console message immediately as usual 
    oldLog.apply(console, messages); // remove this line if you only want to log into the file 

    // asynchronously append to the file log 
    fs.appendFile(filePath, messages.join('\n'), (err) => { 
     if (err) throw err; 
    }); 
    } 
} 

attachFSLogger('./logs.txt'); 

console.log('test'); // logs 'test' and also appends 'test' to logs.txt 

あなたが頻繁に物事をログに記録することが予想される場合は、ストリームを使用してefficientより次のようになります。

function attachFSLogger(filePath) { 
    // remember the old log method 
    const oldLog = console.log; // remove this line if you only want to log into the file 

    // create a write stream for the given file path 
    const fsLog = fs.createWriteStream(filePath, { 
    flags: 'a' // 'a' means appending 
    }) 

    // override console.log 
    console.log = (...messages) => { 

    // log the console message immediately as usual 
    oldLog.apply(console, messages); // remove this line if you only want to log into the file 

    // stream message to the file log 
    fsLog.write(messages.join('\n')); 
    } 
} 

attachFSLogger('./logs.txt'); 

console.log('test'); // logs 'test' and also appends 'test' to logs.txt 

ことが言われていると、多くのライブラリがそこにありますあなたのためにこのようなことを行い、すでに完全にテストされています。ここで

がカップルだ:そう代わりにconsole.log `の

+0

'エラー:EPERM:操作が許可されていません。 'C:\ Program Files \ nodejs \ logs.txt' at Error(ネイティブ)'それを返したときに返されたもの – WebCodingFun

+0

権限の問題です。管理者または制限されていないフォルダー内でスクリプトを実行します。 – nem035

+0

ありがとう!しかし、それは新しい行に書き込むことはありません...どうすれば新しい行が記録されるのですか? – WebCodingFun

0

nodejsライブラリの場合、npm repoはあなたの友人です。それらの多くを見つけて、あなたのニーズに最も適したものを試すことができます。例えばhttps://www.npmjs.com/package/log最初の検索結果はlogです。

あなたはもちろんたとえば、お好みのファイルへの書き込み、独自の機能を持つコンソール機能を上書きすることによって、同様にそれを行うには、コンソールに独自のフックを実現することができます。

var fs = require('fs'); 

function myLog(file) { 
    return function() { 
    fs.appendFileSync(file || 'log.txt', arguments.join('\n')); 
    } 
} 

console.log = myLog(); 
console.warn = myLog(); 
console.error = myLog('errorLog.txt'); 
+0

()' '私はmyLog()'を使うのでしょうか?また、 'console.log'はログですか、それとも単に関数を上書きしていますか? – WebCodingFun

+0

私はちょうどそのコードを使ってみましたが、エラーが発生しました: 'fs.appendFileSync(file | 'log.txt'、arguments.join( '\ n'); ^ SyntaxError:missing)引数リストの後**矢印は 'arguments.join'関数の閉じ括弧を指しています** – WebCodingFun

+0

はそこに閉じ括弧を逃しました - それはちょうど一般的な方向でした...今更新されました –

0

ロガーを.jsあなたのコード内の、その後

var fs = require('fs'); 
var log = []; 

//override default console.log behaviour 
console.log = function(d) { 
    process.stdout.write(d + '\n'); 
    log.push(d); //intercept every log and keep the value 
}; 

//log to file 
function log(filePath, clb){ 
    clb = clb || function(){}; //optional callback 
    fs.truncate(filePath, 0, function() { 
    fs.writeFile(filePath, string, function (err) { 
     clb(err) 
    }); 
    }); 
} 

module.exports = log; 

は、ファイルをインポートし、必要なときに関数を呼び出します。

var logger = require('./logger'); 
logger.log('log.txt', function(err){ 
if(err) 
    console.log(err); 
//else ok 
}); 
+0

返される:'エラー:モジュールを見つけることができません'。/ logger'' – WebCodingFun

+0

別のjavascriptファイルの中にコードの最初のブロックを入れなければなりません。私は名前としてlogger.jsを使用しました(requireはそのファイルを探しています)。これがエラーを起こす理由です。 – Karim

関連する問題