Node.jsの新しい行に追加する方法


94

Node.jsを使用してログファイルにデータを追加しようとしていますが、それは正常に機能していますが、次の行には移動しません。 \n以下の関数では機能していないようです。助言がありますか?

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + "\n", null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

4
Windowsを使用しているか、Windowsベースのテキストエディターを使用してファイルを表示しているため、CRLFペアが必要\r\nですか?
Phrogz 2012

回答:


153

あなたはこれをWindowsで実行しているようです(あなたのH://log.txtファイルパスを与えられます)。

\r\n代わりに使用してみてください\n

正直なところ、\n大丈夫です。ログファイルをメモ帳またはWindows以外の改行をレンダリングしないもので表示している可能性があります。別のビューア/エディタ(ワードパッドなど)で開いてみてください。



Notepad ++のFYIでは、すべての「\\ n」を検索して、「\ n」をダイアログの下部で選択された「拡張」検索モードに置き換えることができます。
ドリュー

91

代わりにos.EOL定数を使用してください。

var os = require("os");

function processInput ( text ) 
{     
  fs.open('H://log.txt', 'a', 666, function( e, id ) {
   fs.write( id, text + os.EOL, null, 'utf8', function(){
    fs.close(id, function(){
     console.log('file is updated');
    });
   });
  });
 }

13
(1/2)node.jsはさまざまな環境で実行できるため、アプリケーションをWindows環境からLinux環境に移行できる可能性があることに注意してください。つまり、アプリケーションがログを追加しているos.EOL場合、/r/n(アプリがWindowsで実行されていたときから)で終わる行がいくつかあり、/n(アプリがLinuxで実行されている場合)だけで終わる行があります。これは、ログファイルの自動解析が行われている場合は特に、問題を引き起こす可能性があります。そのまま使うことにしました/n
Sharky

1
(2/2)それでも、私たちが完全に規制された世界に住んでいたら、それは正しい答えになるので、私はあなたの答えを支持しました。
シャーキー

私はLinuxを使用していますが、将来使用する際に移植性が必要になる可能性があるため、このアプローチは気に入りました。
sdkks

これはクロスプラットフォームで動作するため、最良の答えです。
マイクチェレン

さて、私は使用するアプリケーションをバイナリにパッケージ化する必要がfs.writeありos.EOLました。以前pkgはWindows用のバイナリを生成していました。実行されると、最後に書き込まれたレコードに(予想どおり)新しい行が追加されます。しかし、他のWindowsアプリケーションが処理するように思えますが、これは新しいレコードです。回避策を探しています。
cogitoergosum

0

\r\n組み合わせを使用してノードjsに新しい行を追加します

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.