2013-09-03 1 views
2

У меня есть приложение, которое записывает журналы в файл, созданный NLog. И еще одно приложение называется Log Viewer. Он может открыть и прочитать файл журнала, упомянутый выше. Но здесь есть некоторые проблемы. В то время как средство просмотра журнала читает файл журнала, и в нем записывается первое приложение, некоторые из строк журнала не отображаются в средстве просмотра журналов. например, если первое приложение записывает журнал в каждую секунду, просмотрщик журналов не может отслеживать новые строки журнала и пропустить некоторые из них, вы знаете? Мне нужен онлайн-просмотрщик журналов, который может отслеживать любые новые строки журнала. Я не хочу читать весь текст в файле при каждом вызове метода. Мне нужно просто прочитать новую строку журнала.Прочитайте файл журнала, созданный NLog, и напишите в нем одновременно

+0

Необходимо заблокировать файл. Закончите письмо перед чтением. –

+0

Или вы можете выполнить обе операции асинхронно, используя 'System.Collections.Concurrent.BlockingCollection ', введенный в .net 4.0. –

ответ

3

Единственный способ узнать, что строка журнала новая, зная, какую позицию в файле, который вы в последний раз прочитайте (например, «int lastposition = 0;». Вам нужно прочитать эту позицию до конца файла. Положение «Конец файла» совпадает с длиной файла. Когда блок файла был прочитан, вы показать, что вы читаете в телезрителе, и сохранить последнюю позицию в переменной lastposition, где вам нужно начать в следующий раз, просмотрщик читает.

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

+0

любой код будет действительно appericated? так как это обычная проблема, и ваше решение может очень помочь человеку вроде меня. – rahularyansharma

3

Имею обе приложения имеют один и тот же журнал, вероятно, будут проблематичными. Вероятно, самым простым решением является копирование исходного файла журнала и просмотр его собственной выделенной копии. Вы можете иногда проверять, есть ли в файле фактического журнала обновления и соответственно создавать новые копии.

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

0

Лучшим решением является создание целевой базы NLog для базы данных. Следить за последней обновленной строкой проще и безопаснее отслеживания положения файла. Я бы не рекомендовал делиться файлом активного файла журнала как с чтением, так и с записью.

How to set up NLog Database target.