При локальном запуске экземпляры не создаются

У меня есть веб-приложение, которое использует log4net. Мое веб-приложение развернуто в Azure и работает там отлично. Однако, когда я запускаю его локально через VS2013 (обновление 4), log4net не создает AdoNetAppender,

Я проверил исключение, разбив все сгенерированные исключения, ничего не было сгенерировано, я активировал внутреннюю отладку log4net и ничего исключительного не показало в выходных данных отладки.

Я также добавил <trust level="Full"/> к моему web.config, ничего такого...

Я в тупике, опять же, это работает на Azure, но не локально. Есть идеи? Спасибо!

РЕДАКТИРОВАТЬ Вот мой web.config (только соответствующие строки)

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=**********;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <log4net debug="true">
    <appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionStringName value="DefaultConnection" />
      <commandText value="INSERT INTO Log ([StoreId],[Date],[Thread],[Level],[Logger],[Message],[Exception],[User]) VALUES (@store, @log_date, @thread, @log_level, @logger, @message, @exception, @user)" />
      <parameter>...</parameter>
      ...
    </appender>
    <appender name="DebugAppender" type="log4net.Appender.DebugAppender">
      <immediateFlush value="true" />
      <layout type="log4net.Layout.SimpleLayout" />
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="ADONetAppender" />
      <appender-ref ref="DebugAppender" />
    </root>
  </log4net>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true" />
    <add key="log4net.Config" value="log4net.simple.config"/>
    <add key="log4net.Config.Watch" value="True"/>
  </appSettings>
  <system.web>
    <authentication mode="None" />
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5.1" maxRequestLength="1048576" />
    <customErrors mode="Off" />
    <trust level="Full"/>
  </system.web>
</configuration>

ОБНОВЛЕНИЕ 2

Я обнаружил, что хотя log4net настроен правильно, звонит LogManager.GetLogger("...") возвращает регистратор без дополнений. Однако, если я проверю иерархию дальше, я смогу увидеть AdoNetAppender там, а также когда XmlConfigurator.Configure() запускает выводит следующее log4net: Adding appender named [ADONetAppender] to logger [root]....

Таким образом, проблема сводится к (и это происходит только локально, а не на производстве), что объект вернулся из LogManager.GetLogger(...) не содержит никаких дополнений.

РЕШИТЬ

Смотрите принятый ответ ниже. Оказывается, все, чего мне действительно не хватало, так это звонка XmlConfigurator.Configure() в моем Application_Start метод. Все остальные "доказательства", которые я предоставил, - это нормальное поведение, и причиной того, что я не видел никаких сообщений журнала локально, была небольшая непреднамеренная разница между схемой таблицы журнала между моей локальной базой данных и производственной.

1 ответ

Решение

Вы можете настроить log4net в Global.asax:

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        XmlConfigurator.Configure();

Это работает для лазурного и местного.

Другие вопросы по тегам