Próbuję dołączyć dane do pliku dziennika za pomocą Node.js i to działa dobrze, ale nie przechodzi do następnego wiersza. \n
nie wydaje się działać w mojej funkcji poniżej. Jakieś sugestie?
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');
});
});
});
}
javascript
node.js
newline
DaBears
źródło
źródło
\r\n
?Odpowiedzi:
Wygląda na to, że używasz tego w systemie Windows (biorąc pod uwagę
H://log.txt
ścieżkę do pliku).Spróbuj użyć
\r\n
zamiast po prostu\n
.Szczerze, wszystko w
\n
porządku; prawdopodobnie przeglądasz plik dziennika w notatniku lub czymś innym, co nie renderuje znaków nowej linii innych niż Windows. Spróbuj otworzyć go w innej przeglądarce / edytorze (np. Wordpad).źródło
Zamiast tego należy użyć stałej 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'); }); }); }); }
źródło
os.EOL
, niektóre linie będą kończyć się na/r/n
(od czasu, gdy aplikacja była uruchomiona w systemie Windows), a następnie będziesz mieć wiersze kończące się tylko na/n
(gdy aplikacja działa w systemie Linux). Może to stwarzać pewne problemy, zwłaszcza jeśli działa automatyczne analizowanie plików dziennika. Postanowiłem po prostu użyć/n
.fs.write
w programieos.EOL
do pliku binarnego. Kiedyśpkg
generowałem plik binarny dla systemu Windows. Po wykonaniu, ostatni zapisany rekord ma dołączoną nową linię (zgodnie z oczekiwaniami); ale wygląda na to, że inne aplikacje Windows traktują to jako nowy rekord. Szukam obejścia.użyj
\r\n
kombinacji, aby dołączyć nową linię w node jsvar stream = fs.createWriteStream("udp-stream.log", {'flags': 'a'}); stream.once('open', function(fd) { stream.write(msg+"\r\n"); });
źródło