2009-06-29 22 views
7

Próbowałem uzyskać log4net logowanie w mojej aplikacji internetowej asp.net bez powodzenia lub zauważalnych błędów. Ja próbuje użyć appender ADONetAppender o następującej konfiguracji:Log4Net nie rejestruje ani nie odpowiada błędowi

<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> 

W moim global.asax Application_Start nazywam

log4net.Config.XmlConfigurator.Configure(); 

potem próbować zalogować:

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

Wszystko to nie robi nic, o ile mogę powiedzieć.

+2

mam wrażenie, że te poświadczenia ciąg połączenia są prawdziwe, prawdopodobnie najlepiej nie uwzględnić je w przyszłości stanowisk ... – si618

+0

Mam ten sam problem - to bardzo frustrujące. Brak wpisów w dzienniku, brak błędów w śladzie Log4Net ... nic. – znelson

Odpowiedz

7

Czy dodano dodany następujący punkt pod pod konfiguracja> configSections

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

Mimo że jest to możliwe, aby dodać swoje ustawienia konfiguracyjne log4net do app.config Twojego projektu lub pliku web.config, korzystne jest, aby umieść je w osobnym pliku konfiguracyjnym. Oprócz oczywistej korzyści łatwości konserwacji, ma dodatkową zaletę, że log4net może umieścić obiekt FileSystemWatcher w pliku konfiguracyjnym, aby monitorować, kiedy zmienia się i aktualizuje swoje ustawienia dynamicznie.

Aby użyć osobny plik konfiguracyjny, należy dodać plik o nazwie Log4Net.config do projektu i dodać następujący atrybut do pliku AssemblyInfo.cs:

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

Uwaga: dla aplikacji internetowych, to zakłada rezyduje Log4Net.config w katalogu głównym. Upewnij się, że plik log4net.config jest oznaczony jako "Kopiuj do wyjścia" -> "Kopiuj zawsze" we Właściwościach.

Od here.

+1

, więc jeśli "Kopiuj na wyjściu" nie spowoduje, że log4net.config w katalogu bin aplikacji internetowej, a także katalogu głównego witryny? – dotjoe

28

można również ustawić następujące AppSettings włączyć wewnętrzny log4net informacje debugowania

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

wewnętrzne komunikaty debugowania są zapisywane na konsoli (jeśli jest) lub ślad (takich jak okna debugowania w Visual studio lub dbgview od sysintenals). Pomoże to w rozwiązywaniu problemów z log4net.

+1

Dzięki temu pomogło mi znaleźć wyjątek Oracle wyrzucony przez log4net i natychmiast rozwiązać mój problem. –

+1

Jeśli używasz DebugView, spróbuj sprawdzić menu ** Capture **> ** Capture Global Win32 **. Nic nie dostałem, dopóki tego nie zrobiłem. –

+1

Czy możesz mi powiedzieć, gdzie dokładnie powinienem dodać ten fragment kodu? Mam aplikację internetową .Net 4.0. – Germstorm

9

Internal debugging dla log4Net jest sposobem na to, jak sugeruje @Pratik. Aby zapisać szczegóły w pliku, wykonaj następujące czynności:

Dodaj następujące elementy w web.config, nawet jeśli używasz innego pliku konfiguracyjnego dla 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> 

referencyjny

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

Jest to idealne rozwiązanie do debugowania, dlaczego nie działa w środowisku hostowanym! Dziękuję Ci. –

Powiązane problemy