log4net - Appenders, не работающий в IIS7.5

Я могу записать в файл журнала с помощью 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 не распознал часть его.

15
задан Philipp M 16 January 2014 в 10:11
поделиться

4 ответа

Наконец-то все заработало, я добавил

<trust level="Full" />

в system.web.

При выборе среднего значения AdoNetAppender перестает работать, но FileAppender по-прежнему работает на средних и высоких уровнях.

5
ответ дан 1 December 2019 в 00:13
поделиться

Используйте такой инструмент, как Process Monitor, и следите за процессом IIS. Я подозреваю, что он пытается создать файл журнала в каталоге, к которому у учетной записи IIS нет доступа.

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

2
ответ дан 1 December 2019 в 00:13
поделиться

Вы можете включить внутреннюю отладку 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 .

42
ответ дан 1 December 2019 в 00:13
поделиться

Вы заходили в проводник Windows и проверяли, у каких пользователей (СЕТЕВАЯ СЛУЖБА?) Есть права на запись?

2
ответ дан 1 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: