web-dev-qa-db-ja.com

txtファイルのNode.js console.log()

別の質問があります( last question )。現時点では、Node.jsプロジェクトに取り組んでおり、これにはmanyconsole.log()関数があります。これは今のところ大丈夫ですが、コンソールに書き込まれるすべてのものもまたログファイルに書き込まれるようにします。誰か助けてくれますか?

例えば:

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

私の実際のコードではもう少しですが、これはあなたにアイデアを与えるはずです。

うまくいけばありがとうございます。

17
Limatuz

車輪を再発明する代わりにライブラリを使用します。 npmでlog4j- typeライブラリを探しましたが、 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.');
15
activedecay

このように端末でスクリプトを実行するだけです...

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

これにより、コマンドnode script-file.jsの標準出力をデフォルトではなくログファイルに書き込み、コンソールに出力するようシェルに指示します。

これは redirection と呼ばれ、非常に強力です。すべてのエラーを別のファイルに書きたいとしましょう...

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

これで、すべてのconsole.loglog-file.txtに書き込まれ、すべてのconsole.errorerror-file.txtに書き込まれます

42
Charlie Martin

組み込みのconsole.log何か違うことをする。

var originalLog = console.log;

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

ただし、これによりoriginalLogがメインスコープに配置されるため、関数でラップする必要があります。これはクロージャと呼ばれ、それらについて詳しく読むことができます here

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

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

ファイルを書き込むには、 this stackoverflow questionを参照して、console.log私が示した方法よりもさらに良い、 this を参照。これらの2つの答えを組み合わせることで、最良のソリューションが得られます。

4
Max

@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.');
_

ただし、これはコンソールには何も記録しません。また、1つのロガーに複数のアペンダーを実装する方法を理解していないため、古き良きconsole.log();を実装できます。

PD:これはやや古いスレッドであり、OPの特定の問題はすでに解決されていることは知っていますが、同じ目的でここに来たので、将来このスレッドを訪れる人を助けるために私の経験を残すこともできます

3
J3STER

独自のログ関数を作成するだけです。

_function log(message) {
   console.log(message);
   fs.writeFileSync(...);
}
_

次に、console.log()への既存の呼び出しをすべてlog()に置き換えます。

0
Steve Bennett