#javascript #node.js #logging #newline #fs
#javascript #node.js #ведение журнала #новая строка #fs
Вопрос:
Я пытаюсь создать пользовательский регистратор NodeJS, который записывает данные в файл.
Для добавления данных я использую fs.createWriteStream
с a
флагом.
var fs = require("fs");
var stream = fs.createWriteStream("./test.log", {
encoding: "utf-8",
flags: "a",
autoClose: true
});
// Data to log to file
var data = {
timestamp: new Date().toJSON(),
message: "OK"
};
// Write data
stream.write(JSON.stringify(data) "n");
В результате регистрации несколько раз файл выглядит следующим образом:
{"timestamp":"2020-08-25T17:45:27.733Z","message":"OK"}
{"timestamp":"2020-08-25T17:45:34.820Z","message":"OK"}
{"timestamp":"2020-08-25T17:45:41.142Z","message":"OK"}
(Heres a newline, StackOverflow removes them)
Моя проблема в том, что я не знаю, как удалить завершающую новую строку.
Я думал о добавлении новой строки перед каждой записью в журнале, но для этого мне нужно определить начало файла (я не нашел способа сделать это).
Каков наилучший способ удалить завершающую новую строку, если это вообще возможно? Любая помощь была бы с благодарностью!
Ответ №1:
Вам нужно проверить, пуст ли файл:
var fs = require("fs");
var stream = fs.createWriteStream("./test.log", {
encoding: "utf-8",
flags: "a",
autoClose: true
});
// Data to log to file
var data = {
timestamp: new Date().toJSON(),
message: "OK"
};
// Check if file is empty
var stats = fs.statSync("./test.log");
var isEmpty = stats["size"] == 0;
// Write data
stream.write((isEmpty ? "" : "n") JSON.stringify(data) );
Комментарии:
1. Это означало бы, что каждая отдельная запись находится в первой строке, чего я не пытаюсь достичь.
2. В этом случае вам нужно проверить, пуст ли файл, если нет, добавьте новую строку
3. Большое вам спасибо, благодаря вам я нашел решение. 🙂
4. Я отредактировал свой ответ; похоже ли ваше решение на него?
5. Так и есть. Тем не менее, я приму ваш ответ, еще раз спасибо!