別の質問があります( last question )。現時点では、Node.jsプロジェクトに取り組んでおり、これにはmanyconsole.log()関数があります。これは今のところ大丈夫ですが、コンソールに書き込まれるすべてのものもまたログファイルに書き込まれるようにします。誰か助けてくれますか?
例えば:
Console.log('The value of array position [5] is '+ array[5]);
私の実際のコードではもう少しですが、これはあなたにアイデアを与えるはずです。
うまくいけばありがとうございます。
車輪を再発明する代わりにライブラリを使用します。 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.');
このように端末でスクリプトを実行するだけです...
node script-file.js > log-file.txt
これにより、コマンドnode script-file.js
の標準出力をデフォルトではなくログファイルに書き込み、コンソールに出力するようシェルに指示します。
これは redirection と呼ばれ、非常に強力です。すべてのエラーを別のファイルに書きたいとしましょう...
node script-file.js >log-file.txt 2>error-file.txt
これで、すべてのconsole.log
がlog-file.txt
に書き込まれ、すべてのconsole.error
がerror-file.txt
に書き込まれます
組み込みの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つの答えを組み合わせることで、最良のソリューションが得られます。
@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の特定の問題はすでに解決されていることは知っていますが、同じ目的でここに来たので、将来このスレッドを訪れる人を助けるために私の経験を残すこともできます
独自のログ関数を作成するだけです。
_function log(message) {
console.log(message);
fs.writeFileSync(...);
}
_
次に、console.log()
への既存の呼び出しをすべてlog()
に置き換えます。