Запись нескольких клиентов в один файл с помощью блока приложения ведения журнала - PullRequest
2 голосов
/ 16 декабря 2008

У меня есть следующий сценарий: 1. Сторона пользовательского интерфейса .NET использует Logging App Block для записи в плоский файл 2. Неуправляемая служба Windows использует собственный регистратор для записи в тот же файл, что и 1.

Вопрос: Есть ли способ включить FlatFile TraceListener для закрытия дескриптора файла после того, как запись зарегистрирована, чтобы служба Windows также могла записывать в файл?

Спасибо!

Обновление: Я включил Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Writer.Dispose (); и это закрывает поток, так что это бы сработало - просто любопытно, есть ли другой способ сделать это.

Обновление 2: Финальные заметки

P & P предлагает выполнять запись в один MSMQ из нескольких приложений. Таким образом, вам не нужно вызывать Dispose () и т. Д.

Ответы [ 3 ]

2 голосов
/ 22 января 2009

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

0 голосов
/ 10 августа 2010

Где вы получаете .Dispose? Я набираю EnterpriseLibrary.Logging.Logger.Writer, но .Writer, поскольку нет методов или свойств, нет .Dispose.

Спасибо

TCW

Нашел:

Импорт Microsoft.Practices.EntLib.Common делает свое дело.

0 голосов
/ 22 января 2009

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

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

...