При локальном запуске экземпляры не создаются
У меня есть веб-приложение, которое использует 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();
Это работает для лазурного и местного.