[Начать 2-е РЕДАКТИРОВАНИЕ]
Еще одна идея ...
Если стороннее приложение использует каркас журналирования, такой как NLog, log4net или System.Diagnostics, вы все равно можете написать свой собственный Target / Appender / TraceListener и направить сообщения куда-нибудь, чтобы вы могли на них посмотреть (например, файл, который не открывается исключительно другому процессу и т. д.).
Если ваше стороннее приложение использует каркас регистрации, мы, вероятно, уже слышали об этом; -)
[Конец 2-го РЕДАКТИРОВАНИЯ]
[Начать редактировать]
Я думаю, что неправильно понял вопрос. Сначала это звучало так, как будто вы используете стороннюю библиотеку, в которой реализовано ведение журналов, и вы хотели выполнить этот анализ из программы, которая генерировала ведение журналов. Перечитав свой вопрос, звучит так, будто вы хотите «прослушать» файл журнала извне приложения. Если это так, мой ответ, вероятно, не поможет вам. К сожалению.
[Конец РЕДАКТИРОВАНИЯ]
У меня нет ничего, что можно предложить о MemoryMappedFiles, но мне интересно, сможете ли вы достичь того, чего хотите, написав пользовательский слушатель / цель / аппендер для сторонней системы ведения журналов?
Например, если вы используете NLog, вы можете написать собственную цель и направить туда все свои сообщения регистрации (при этом также направляя их к «настоящей» цели). Таким образом, вы получаете трещину в каждом сообщении журнала, когда оно регистрируется (так что это на самом деле в реальном времени, а не в реальном времени). Вы можете сделать то же самое с log4net и System.Diagnostics.
Обратите внимание, что у NLog даже есть цель "MethodCall". Чтобы использовать это, вам нужно только написать статический метод с правильной подписью. Я не знаю, имеет ли log4net сходную концепцию с этим.
Кажется, что было бы легче получить надежную работу, чем пытаться читать и анализировать файл журнала, когда он пишется сторонним программным обеспечением.