Я могу записать в файл журнала с помощью log4net и Кассини/IIS dev сервер, но когда я использую IIS7.5, я не могу выписать в файл.
Первоначально, я получил исключение безопасности, таким образом, я добавил requirePermission="false"
и исключение ушло, но никакой файл не был создан.
Доверительный уровень полон согласно IISM.
Я не могу получить эту работу над своей собственной машиной, я задаюсь вопросом, что собирается произойти, когда я передаю ISP (discountASP).
Вот установка log4net:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
</configSections>
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="FileAppender" />
</root>
</log4net>
C#
log4net.Config.XmlConfigurator.Configure();
ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Log.Info("This is a test");
Какие-либо подсказки?
ASP.NET 3.5, VS2008, Windows 7, IIS7.5, log4net 1.2.10
Править:
Я использовал тестовое веб-приложение, которое работало в Cassini и выполнило его в IIS7.5, и это работало, таким образом, существует что-то характерное для моего веб-приложения, которое это препятствует тому, чтобы log4net запустил. Существует большое продолжение в нем, ELMAH, кэширование вывода, Инструментарий Управления Ajax, аутентификация форм, ssl, перезапись URL, и т.д... Кроме включения каждого из тех то, которые к тестовому приложению, является там лучшим способом выяснить то, что заставляет log4net работать?
ОБНОВЛЕНИЕ:
Я использовал AdoNetAppender, чтобы избегать проблем разрешения файла и все еще получаю тот же результат. AdoNetAppender работает на тестовое приложение, работающее на Cassini и IIS, но он не работает над моим веб-приложением. Получение следующего исключения:
Система. Безопасность. SecurityException: Запрос на разрешение типа 'Система. Конфигурация. ConfigurationPermission, Система. Конфигурация...' перестала работать.
ОБНОВЛЕНИЕ 2: Я ошибался, что тестовое веб-приложение fileAppender работало в IIS7.5. Это - то, что происходит: тестовое веб-приложение fileAppender и AdoDotNetAppender обе работы в Кассини/IIS dev, но не в IIS7.5. Таким образом, я думаю, что это - IIS, это - проблема, не мое веб-приложение.
Примечание. Я выполняю VS2008 как Администратор, но зарегистрирован в Windows 7 как неадминистратор. Кроме того, я запускаю Windows 7 Home Premium, не Профессиональную.
Я дал полное разрешение СЕТЕВОЙ СЛУЖБЫ к веб-корневому каталогу и все еще никакому созданному файлу. Также дал ВСЕМ полные полномочия, никакой файл.
Так как adoDotNetAppender не работал ни один (но сделал в dev IIS), я думаю, что может быть другая проблема в дополнение к полномочиям файла.
ОБНОВЛЕНИЕ 3:
Я заставил это работать на FileAppender на IIS7. Если я добавляю это:
<identity impersonate="true"
userName="zzz"
password="yyy" />
и если пользователь является администратором, это работает. Если это - я, не администратор, это не делает. Таким образом, это - проблема полномочий. Но я действительно предоставлял ВСЕМ права на каталог, в который записан файл прежде, и он не работал, таким образом, существует разрешение, устанавливающее в другом месте. Кроме того, в то время как FileAppender теперь работает с олицетворением, AdoNetAppender stil не делает в IIS7. Я пытался добавить:
<securityContext type="log4net.Util.WindowsSecurityContext">
<userName value="zzz" />
<password value="yyy" />
<domain value="aaa" />
</securityContext>
к разделу AdoNetAppender, но все еще получению тихого сбоя.
Я добавил щедрость для любого, кто может помочь мне получить AdoNetAppender, работающий с IIS7.5.
ОБНОВЛЕНИЕ 4:
Я наконец овладел отслеживанием стека.Вот:
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at log4net.Util.LogicalThreadContextProperties.GetProperties(Boolean create)
at log4net.Core.LoggingEvent.CreateCompositeProperties()
at log4net.Core.LoggingEvent.CacheProperties()
at log4net.Core.LoggingEvent.FixVolatileData(FixFlags flags)
at log4net.Core.LoggingEvent.set_Fix(FixFlags value)
at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent)
at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent)
The action that failed was:
LinkDemand
The type of the first permission that failed was:
System.Security.Permissions.SecurityPermission
The Zone of the assembly that failed was:
MyComputer
У меня был SQL Profiler на, и ничто не добралось до SQL Server. Кроме того, учетная запись SQL Server имеет надлежащие полномочия сделать вставку. Кроме того, я удалил раздел SecurityContext, поскольку log4net не распознал часть его.
Наконец-то все заработало, я добавил
<trust level="Full" />
в system.web.
При выборе среднего значения AdoNetAppender перестает работать, но FileAppender по-прежнему работает на средних и высоких уровнях.
Используйте такой инструмент, как Process Monitor, и следите за процессом IIS. Я подозреваю, что он пытается создать файл журнала в каталоге, к которому у учетной записи IIS нет доступа.
После этого теста укажите абсолютный путь к файлу журнала, к которому, как вы знаете, процесс IIS имеет доступ.
Вы можете включить внутреннюю отладку log4net, добавив ключ log4net.Internal.Debug
в файл конфигурации вашего приложения.
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
При этом сообщения отладки будут записаны в консоль и в систему System.Diagnostics.Trace . Затем вы можете записать эти сообщения в текстовый файл, добавив прослушиватель трассировки в файл конфигурации. Убедитесь, что у приложения есть разрешение на запись в файл.
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
В качестве альтернативы сообщения трассировки также записываются в системный отладчик, поэтому вы можете использовать такую утилиту, как DebugView , для захвата сообщений. Дополнительные сведения см. В часто задаваемых вопросах log4Net .
Вы заходили в проводник Windows и проверяли, у каких пользователей (СЕТЕВАЯ СЛУЖБА?) Есть права на запись?