Como acrescentar uma nova linha em Node.js

94

Estou tentando anexar dados a um arquivo de log usando Node.js e está funcionando bem, mas não vai para a próxima linha. \nnão parece estar funcionando na minha função abaixo. Alguma sugestão?

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');
    });
   });
  });
 }
DaBears
fonte
4
Você está no Windows / usando um editor de texto baseado no Windows para visualizar seu arquivo e, portanto, precisa de um par CRLF \r\n?
Phrogz

Respostas:

153

Parece que você está executando isso no Windows (dado o H://log.txtcaminho do arquivo).

Tente usar em \r\nvez de apenas \n.

Honestamente, \nestá bem; você provavelmente está visualizando o arquivo de log no bloco de notas ou algo mais que não processa novas linhas não-Windows. Tente abri-lo em um visualizador / editor diferente (por exemplo, Wordpad).

Rob Hruska
fonte
2
estava visualizando no bloco de notas :)
FacePalm
Para sua informação, no Notepad ++ você pode encontrar todos os modos de pesquisa "\\ n" substituídos por "\ n" por "Estendido" selecionados na parte inferior da caixa de diálogo.
Desenhou em
91

Em vez disso, use a constante 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');
    });
   });
  });
 }
Shinzo
fonte
13
(1/2) Observe que, uma vez que o node.js pode ser executado em muitos ambientes diferentes, pode ser possível mover seu aplicativo de, digamos, um ambiente Windows para um Linux. isso significa que se seu aplicativo está anexando logs usando, os.EOLvocê terá algumas linhas terminando com /r/n(desde o momento em que o aplicativo estava em execução no Windows) e, em seguida, você terá linhas terminando apenas com /n(quando o aplicativo é executado no Linux). Isso pode causar alguns problemas, especialmente se houver qualquer análise automática dos arquivos de log. Decidi apenas usar /n.
Sharky
1
(2/2) Mesmo assim, votei positivamente em sua resposta, pois seria a correta, se vivêssemos em um mundo perfeitamente regulado.
Sharky
Eu uso o Linux, mas gostei dessa abordagem, pois posso querer portabilidade no uso futuro.
sdkks 01 de
Esta é a melhor resposta porque funciona em plataforma cruzada.
Mike Chelen,
Bem, eu tive que empacotar um aplicativo usado fs.writecom os.EOLem um binário. Eu costumava pkggerar um binário para Windows. Quando executado, o último registro escrito tem uma nova linha anexada a ele (como esperado); mas, parece que outros aplicativos do Windows tratam disso é um novo recorde. Estou procurando uma solução alternativa.
cogitoergosum
0

use a \r\ncombinação para acrescentar uma nova linha no nó js

  var stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'});
  stream.once('open', function(fd) {
    stream.write(msg+"\r\n");
  });
Codemaker
fonte