Какой алгоритм работы модуля по логированию изменений файла?
А стрим тут и не нужен, делайте fs.readFile, потом ставьте fs.watch и при изменении fs.readFile в другую переменную и сравнивайте, только нужно создать еще очередь сравниваний, потому, что файл может меняться чаще, чем закончится предыдущее сравнивание (но это чисто теоретически, если по специфике задачи известно, что он меняется с малой периодичностью, то это можно и опустить). Результат fs.readFile это объект Buffer, для сравнения двух буферов, скорее всего, если они содержат текст их можно перегнать в строки .toString() и парсить. А вот понять, идентичны ли буферы, можно при помощи Buffer.compare(buf1, buf2).
Вроде логично, что stream закрыт. Вы же не можете держать FileDescriptor открытым для одновременной записи и чтения двумя процессами. Это неконсистентно. Потом держать файл в памяти просто как dump пожалуй дороговато, наверное разумней хранить dump в файловой системе(если у вас журналирующая файловая система, то она сама все сделает). Посчитать изменения проще всего gnu-utill коммандой diff или ищите библиотеки.