Я пишу записи в файл в node.js, и мне нужно чередовать файл с новым каждые столько строк или по прошествии некоторого времени, но я не могу потерять ни одной строки в процессе. Если я попытаюсь с помощью fs.createWriteStream создать новый поток, я потеряю строки, перезаписав старый поток. Любой совет будет очень признателен.
3 ответа
Не перезаписывайте старый поток. Создайте новый поток как отдельный ресурс.
var activestream;
function startup() {
activestream = fs.createWriteStream('path');
}
function record(line) {
activestream.write(line);
}
function rotate() {
var newstream = fs.createWriteStream('path2');
activestream.end();
activestream = newstream;
}
... что-то вроде этого должно сработать. Очевидно, вам придется выяснить, как управлять путями.
Я собираюсь дать здесь нетрадиционный ответ.
Вы можете рассмотреть готовую библиотеку, такую как winston, которая поставляется с хорошо протестированной функциональностью, чтобы делать именно то, что вы хотите. Учитывая, что он предназначен для записи журналов, вы также можете легко писать свои записи в CSV.
Еще одним большим преимуществом использования Winston является поддержка нескольких транспортов, поэтому вы можете писать не только в файлы и вращать их, вы также можете писать на другие носители, MongoDB и некоторые другие.
Он также выполняет такие вещи, как условная запись, и вы можете определить собственный «уровень журнала» для записи различных функциональных записей в ваш файл.
Я рекомендую вам проверить это, прежде чем готовить собственный раствор.
Я бы порекомендовал написать собственный менеджер потоков, аналогичный Jason's, но вместо того, чтобы заканчивать поток при запросе поворота, позвольте записи закончиться, приостановите поток, поверните файл, а затем возобновите поток. Для каждого файла должен потребоваться только один поток, и вам не нужно его воссоздавать.
Похожие вопросы
Новые вопросы
node.js
Node.js — это основанная на событиях, неблокирующая, асинхронная среда выполнения ввода-вывода, использующая движок Google V8 JavaScript и библиотеку libuv. Он используется для разработки приложений, которые интенсивно используют возможность запуска JavaScript как на стороне клиента, так и на стороне сервера и, следовательно, выигрывают от возможности повторного использования кода и отсутствия переключения контекста.