Регистрация нескольких процессов в одном файле с использованием Enterprise Library 4.1 - PullRequest
8 голосов
/ 13 ноября 2009

У меня одновременно запущено несколько процессов, и я хочу войти в один и тот же файл.

Мы использовали Enterprise Library 4.1 Logging Application Block (с RollingFlatFileTraceListener), и он отлично работает, за исключением того, что он добавляет GUID к имени файла журнала, когда два процесса пытаются записать в файл журнала в то же время (причудой System.Diagnostics.TextWriterTraceListener я считаю).

Я пробовал разные вещи, включая вызов Logger.Writer.Dispose() после записи в файл журнала, но не идеально делать блокирующий вызов каждый раз, когда пишется запись в журнале.

Форумы EntLib предлагают использовать MSMQ со службой распространителя, но это не вариант, поскольку MSMQ не разрешен в моей компании.

Есть ли другой способ, с помощью которого я могу быстро и легко войти из нескольких потоков / процессов в один и тот же файл?

Ответы [ 4 ]

4 голосов
/ 13 ноября 2009

Извините, но ответ - нет. File TraceListener блокирует выходной файл, так что только один TraceListener может войти в файл.

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

Другой вариант, о котором я могу подумать, - это написать собственную службу журналирования (вне процесса), которая регистрирует файл и принимает LogEntries. Затем создайте пользовательский прослушиватель трассировки, который отправит сообщение вашему сервису.

Это может быть не очень хорошей идеей, поскольку у вас будет немного индивидуальной разработки, а также это может повлиять на производительность, поскольку это вызов вне процесса. По сути, вы настраиваете свой собственный упрощенный псевдо-дистрибьютор-сервис.

2 голосов
/ 13 ноября 2009

EntLib блокирует файл журнала при записи в него. Поэтому 2 процесса не могут записывать в один и тот же файл журнала.

Когда у нас возникла проблема, из-за которой нам нужно было вести журнал из разных мест, в одно и то же место, мы использовали ведение журнала базы данных.

Если вы на 100% застряли при регистрации в текстовом файле, вы можете войти в отдельные файлы журнала, а затем написать программу для объединения этих файлов.

1 голос
/ 07 августа 2010

Я знаю, что это старо, но если вам все еще интересно. log4net поддерживает это:

http://logging.apache.org/log4net/release/faq.html#How do I get multiple process to log to the same file?
0 голосов
/ 10 февраля 2015

Проблема возникает, когда пул приложений перезагружается и допускает перекрывающиеся потоки. Закрывающий поток по-прежнему открыт, и новый поток получает ошибку. Попробуйте отключить перекрывающееся поведение перезапуска в IIS или создайте свою собственную версию средства записи текста.

...