Прочетете лог файл, създаден от NLog, и пишете в него едновременно

Имам приложение, което записва регистрационни файлове във файл, създаден от NLog. И имам друго приложение, наречено Log Viewer. Той може да отвори и прочете лог файла, споменат по-горе. Но тук има някакъв проблем. Докато програмата за преглед на регистрационни файлове чете регистрационния файл и първото приложение пише в него, част от реда на журнала не може да се види в програмата за преглед на журнали. например, ако първото приложение пише журнал на всяка милисекунда, програмата за преглед на журнали не може да проследи новите редове в журнала и да пропусне някои от тях, разбирате ли? Имам нужда от онлайн програма за преглед на журнали, която може да проследява всички нови редове в журнала. Не искам да чета целия текст във файла при всяко извикване на метод, трябва само да прочета нов ред от журнал в него


person Mohsen    schedule 03.09.2013    source източник
comment
Трябва да заключите файла. Завършете писането, преди да прочетете.   -  person Sam Leach    schedule 03.09.2013
comment
Или можете да извършите и двете операции асинхронно, като използвате System.Collections.Concurrent.BlockingCollection<T>, въведен в .net 4.0.   -  person Imad Nabil Alnatsheh    schedule 03.09.2013


Отговори (3)


Единственият начин, по който можете да разберете, че редът на журнала е нов, е като знаете коя позиция във файла сте прочели последно (напр. "int lastposition=0;". Трябва да прочетете от тази позиция до края на файла. Позицията на „Край на файла" е същото като дължината на файла. Когато файловият блок е прочетен; вие показвате какво сте прочели в програмата за преглед и запазвате последната позиция в променливата lastposition; откъдето трябва да започнете следващия път, програмата за преглед е четене.

Но ако зрителят не може да отвори файла... това е друга история.

person Holger Kjærsgaard Pedersen    schedule 03.09.2013
comment
всеки код ще бъде наистина appericated? тъй като това е често срещан проблем и вашето решение може да помогне много на човек като мен. - person rahularyansharma; 11.09.2013

И двете приложения да споделят един и същ журнал вероятно ще бъде проблематично. Вероятно най-лесното решение е вашият зрител да копира оригиналния лог файл и да прегледа собственото си специално копие. Можете от време на време да проверявате дали действителният лог файл има актуализации и съответно да правите нови копия.

Ако и двамата имат достъп до един и същ файл, това ще изисква заключване и рискува да причини проблеми във вашето приложение, ако файлът не е достъпен за запис (възможно блокиране, загуба на записи в журнала или генериране на изключения).

person STW    schedule 16.09.2013

Най-доброто решение е да настроите NLog цел за база данни. Проследяването на последния актуализиран ред е по-лесно и по-безопасно от проследяването на позицията на файла. Не бих препоръчал споделяне на файл с активен лог файл както за четене, така и за запис.

Как да настроите цел за NLog база данни.

person Dhanuka777    schedule 17.03.2016