Имам приложение, което записва регистрационни файлове във файл, създаден от NLog. И имам друго приложение, наречено Log Viewer. Той може да отвори и прочете лог файла, споменат по-горе. Но тук има някакъв проблем. Докато програмата за преглед на регистрационни файлове чете регистрационния файл и първото приложение пише в него, част от реда на журнала не може да се види в програмата за преглед на журнали. например, ако първото приложение пише журнал на всяка милисекунда, програмата за преглед на журнали не може да проследи новите редове в журнала и да пропусне някои от тях, разбирате ли? Имам нужда от онлайн програма за преглед на журнали, която може да проследява всички нови редове в журнала. Не искам да чета целия текст във файла при всяко извикване на метод, трябва само да прочета нов ред от журнал в него
Прочетете лог файл, създаден от NLog, и пишете в него едновременно
Отговори (3)
Единственият начин, по който можете да разберете, че редът на журнала е нов, е като знаете коя позиция във файла сте прочели последно (напр. "int lastposition=0;". Трябва да прочетете от тази позиция до края на файла. Позицията на „Край на файла" е същото като дължината на файла. Когато файловият блок е прочетен; вие показвате какво сте прочели в програмата за преглед и запазвате последната позиция в променливата lastposition; откъдето трябва да започнете следващия път, програмата за преглед е четене.
Но ако зрителят не може да отвори файла... това е друга история.
И двете приложения да споделят един и същ журнал вероятно ще бъде проблематично. Вероятно най-лесното решение е вашият зрител да копира оригиналния лог файл и да прегледа собственото си специално копие. Можете от време на време да проверявате дали действителният лог файл има актуализации и съответно да правите нови копия.
Ако и двамата имат достъп до един и същ файл, това ще изисква заключване и рискува да причини проблеми във вашето приложение, ако файлът не е достъпен за запис (възможно блокиране, загуба на записи в журнала или генериране на изключения).
Най-доброто решение е да настроите NLog цел за база данни. Проследяването на последния актуализиран ред е по-лесно и по-безопасно от проследяването на позицията на файла. Не бих препоръчал споделяне на файл с активен лог файл както за четене, така и за запис.
Как да настроите цел за NLog база данни.
System.Collections.Concurrent.BlockingCollection<T>
, въведен в .net 4.0. - person Imad Nabil Alnatsheh   schedule 03.09.2013