2009-06-29 5 views
7

Я пытаюсь запустить log4net в моем веб-приложении asp.net без каких-либо успехов или каких-либо заметных ошибок. Я пытаюсь использовать ADONetAppender Appender со следующей конфигурацией:Log4Net не регистрируется и не регистрируется

<log4net> 
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> 
    <bufferSize value="1" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="server=" /> 
    <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context]) VALUES 
          (@log_date, @thread, @log_level, @logger, @message, @exception, @context)" /> 
    <parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
    <parameterName value="@thread" /> 
    <dbType value="String" /> 
    <size value="32" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%t" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@log_level" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%p" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@context" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%x" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@logger" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%c" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%m" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ADONetAppender" /> 
</root> 

В моем global.asax Application_Start я называю

log4net.Config.XmlConfigurator.Configure(); 

Тогда при попытке входа:

protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
protected void Page_Load(object sender, EventArgs e) 
{    
    log.Info("did I log yet?"); 
} 

Все это ничего не делает, насколько я могу судить.

+2

Я получаю ощущение, что эти строки подключения учетные данные являются реальными, вероятно, лучше не включать их в будущих ... – si618

+0

У меня такая же проблема - это очень расстраивает. Нет записей в журнале в db, никаких ошибок из трассировки Log4Net .. ничего. – znelson

ответ

7

Вы добавили добавили следующую секцию под под> Configsections раздела Конфигурации

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

Хотя можно добавить параметры конфигурации Log4Net в app.config вашего проекта или файл web.config, предпочтительно поместите их в отдельный файл конфигурации. Помимо очевидной выгоды от ремонтопригодности, у него есть дополнительное преимущество: log4net может разместить объект FileSystemWatcher в вашем файле конфигурации, чтобы отслеживать, когда он изменяется, и динамически обновлять его настройки.

Чтобы использовать отдельный конфигурационный файл, добавьте файл с именем Log4Net.config для вашего проекта и добавьте следующий атрибут к вашему AssemblyInfo.cs файл:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] 

Примечание: для веб-приложений, это предполагает, что Log4Net.config проживает в корневой папке. Убедитесь, что файл log4net.config помечен как «Копировать на вывод» -> «Копировать всегда» в свойствах.

От here.

+1

, так что если вы сделаете «Копировать на вывод», не будет ли этот файл log4net.config в каталоге bin вашего веб-приложения, а также в корне сайта? – dotjoe

28

вы также можете установить следующие AppSettings, чтобы включить внутреннюю log4net отладочной информации

<appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

Внутренние отладочные сообщения записываются в консоль (если есть) или след (например, окно отладки в визуальном студия или dbgview от sysintenals). Это поможет вам устранить проблемы с log4net.

+1

Спасибо, это помогло мне найти исключение Oracle, созданное log4net, и немедленно решить проблему. –

+1

Если вы используете DebugView, попробуйте проверить меню ** Capture **> ** Capture Global Win32 **. Я ничего не получал, пока не сделал это. –

+1

Не могли бы вы рассказать мне, где именно я должен добавить этот фрагмент кода? У меня есть веб-приложение .Net 4.0. – Germstorm

9

Internal debugging для log4Net - это путь, предложенный @Pratik. Чтобы записать данные в файл, выполните следующие действия:

Добавьте следующее в web.config, даже если вы используете другой файл конфигурации для log4net.

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

<system.diagnostics> 
<trace autoflush="true"> 
    <listeners> 
    <add 
    name="textWriterTraceListener" 
    type="System.Diagnostics.TextWriterTraceListener" 
    initializeData="C:\toolbox\SmartClient\log4net.txt" /> 
    </listeners> 
</trace> 
</system.diagnostics> 

Ссылка

  1. How do I enable log4net internal debugging?
  2. log4net - Appenders not working in IIS7.5
+1

Это отлично подходит для отладки, почему он не работает в среде размещения! Спасибо. –