Процесс не может получить доступ к файлу «C:\inetpub\wwwroot\MyApp\5-23-2011.log», поскольку он используется другим процессом.

У меня есть одноэлементный регистратор, который используется внутри приложения ASP.NET. Иногда я получаю ошибку The process cannot access the file в этой строке:

StreamWriter sw = new StreamWriter("Path to log file", true);

Я проверил дескриптор файла с помощью Process Explorer, и w3wp.exe владеет дескриптором, поэтому кажется, что потоки отличаются от тот же процесс вызвал проблему.

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


person Xaqron    schedule 23.05.2011    source источник
comment
Что ты запираешь? Добавьте строку, содержащую оператор блокировки.   -  person Chris Shain    schedule 23.05.2011
comment
Почему бы просто не использовать существующую библиотеку ведения журналов и избавить себя от этих головных болей? Есть log4net, elmah, блок приложения для корпоративного ведения журналов MS...   -  person nickytonline    schedule 23.05.2011
comment
Я создал новый вопрос и добавил под ним полный исходный код: stackoverflow.com/questions/6092543/   -  person Xaqron    schedule 23.05.2011
comment
@nickyt: я пробовал многие из них, и просто сославшись на регистратор, такой как EntLib, добавил к моему коду сборки размером 8 МБ. Мне нужен легкий регистратор. Вы можете проверить это здесь: stackoverflow .com/questions/6092543/   -  person Xaqron    schedule 23.05.2011
comment
у вас на сервере включены веб-сады?   -  person Alex Aza    schedule 23.05.2011


Ответы (1)


Не открывайте файл журнала более одного раза; просто откройте его при запуске приложения, закройте его при выходе (и часто очищайте его). Открытие и закрытие более одного раза просто неэффективно.

person Ernest Friedman-Hill    schedule 23.05.2011