2009-08-10 27 views
5

naprawdę proste pytanie -> nie mogę uzyskać żadnych danych z Log4Net w mojej aplikacji ASP.NET Mam prostą ASP.NET strona internetowa, która odwołuje się do biblioteki klas. w bibliotece tej klasy, mam kilka wierszy, które wywołują rejestratora.Nie mogę uzyskać Log4Net do pracy w mojej witrynie ASP.NET :(

Próbuję odczytać danych wyjściowych log4net w moim Visual Studio 2008 debugowania Wyjście okno.

Oto mój kod i konfiguracja ...

//Class Library project 
//File: Foo.cs 
public class FooService 
{ 
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService)); 

    public FooService() 
    { 
     // NOTE: To play with my L4N settings, I'll call Debug once, then Info once. 

     log.Info("Starting Constructor"); 

     // ... snip ... 

     log.Debug("Leaving Constructor"); 
    } 
} 


// ASP.NET Website project 
// File: global.asax 
void Application_Start(object sender, EventArgs eventArgs) 
{ 
    log4net.Config.XmlConfigurator.Configure(); 
} 

// File: Whatever.aspx.cs 
// A delegate method (when a user clicks a button) creates the FooService() instance. 

// File: web.config 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" /> 

    // .... 

</configSections> 


<log4net> 
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Green" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" /> 
    </appender> 

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender"> 
     <mapping> 
      <level value="ERROR" /> 
      <foreColor value="White" /> 
      <backColor value="Red, HighIntensity" /> 
     </mapping> 
     <mapping> 
      <level value="DEBUG" /> 
      <backColor value="Blue" /> 
     </mapping> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
    </appender> 

    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="OutputDebugStringAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="ColoredConsoleAppender" /> 
    </root> 
    <!-- Specify the level for some specific categories --> 
    <logger name="DotNetOpenAuth"> 
     <level value="ALL" /> 
    </logger> 
</log4net> 

Pozdrawiam za pomoc i sugestie ...

EDYCJA: Dodano RollingLogFileAppender.

+0

Dlaczego używasz ColoredConsoleAppender w aplikacji sieciowej? – RichardOD

+0

Bo mam nadzieję, że console.out zostanie przekierowany do tego dziwnego okna wyjściowego Debuggera ... –

Odpowiedz

5

Miałem ten sam problem i myślę, że patrzyłem na zły web.config lub coś podobnego. W końcu oddzieliłem plik log4net.config od web.config i umieściłem ścieżkę do niego \ inetpub \ Logs \ log4net.config i wszystko jest w porządku.

UDPATOWANE NA ŻĄDANIE: edytowane z nieco bardziej skomplikowanej wersji.

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" /> 
     </layout> 
    </appender>\ 

    <root> 
     <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

I to jest skonfigurowany w kodzie następująco:

 var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config"; 
     var finfo = new System.IO.FileInfo (logpath); 
     XmlConfigurator.Configure(finfo); 
+0

koleś - nie u skończyć zalogowaniu do Visual Studio (debugger) Okno WYJŚCIA? lub do pliku? –

+0

Tak, używam programu TraceAppender z narzędziem OutputDebugString i przeglądam go w VS lub pod adresem http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – kenny

+0

wow. ta aplikacja sysinternals jest niesamowita :) uwielbiam tam coś i oto kolejna sprawa kew :) Czy możesz szczegółowo wyjaśnić (np. opublikować zrzut ekranu z ustawieniami log4net pliku .config), proszę? –

5

ASP.Net ma ograniczenie wykorzystania dostępu do systemu plików, więc staram się wyraźnie podkreślić katalogu pod App_Data (byli to jest dozwolone) Oto moja próbka robocza:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="App_Data\logging\log-file.txt"/> 

Albo z dachowania

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="App_Data\logging\log-append.txt"/> 
+0

Heh - stary. Nigdy nie powiedziałem, że używam systemu plików :) spójrz jeszcze raz ..... –

+0

Po prostu wypróbuj tę działającą próbkę, po której możesz oddzielić nie działającą konfigurację od niezostrojonych zabezpieczeń. – Dewfy

+0

ok .. Dam ci to ... hmm. niektóre błędy w oknie WYJŚCIA ... og4net: BŁĄD XmlHierarchyConfigurator: Nie znaleziono programisty o nazwie [RollingFileAppender]. log4net: ERROR XmlHierarchyConfigurator: Nie znaleziono appendera o nazwie [RollingFileAppender]. log4net: ERROR XmlHierarchyConfigurator: Nie można znaleźć obiektu [mapping], aby ustawić obiekt na [log4net.Appender.OutputDebugStringAppender] log4net: ERROR XmlHierarchyConfigurator: Nie można odnaleźć obiekt [], aby ustawić odwzorowania obiektu na [log4net.Appender.OutputDebugStringAppender] –

0

Istnieją conajmniej 2 możliwe problemy:

  • drodze adres do pliku jest określony, spróbuj użyć bezwzględnym ścieżka zamiast.
  • Proces wykonywania połączenia wymaga uprawnień do modyfikacji pliku. Sprawdź, czy konto użytkownika, które zapisuje dane w pliku dziennika, ma do tego prawo.

Aby debugować, chciałbym utworzyć i opróżnić katalog, dać wszystkim pełną kontrolę, skonfigurować, aby logować się do tego katalogu. Następnie sprawdź, czy działa, a następnie stopniowo dokręć zabezpieczenia do akceptowalnego poziomu.

3

Dobrze, znalazłem odpowiedź. Potrzebowałem użyć TraceAppender.

Aplikacja plik konfiguracyjny mogą być używane do kontrolowania tego, co słuchacze są rzeczywiście używane. Zobacz dokumentację MSDN dla klasy Trace dla szczegóły konfiguracji systemu śledzenia .

Zdarzenia są zapisywane przy użyciu metody System.Diagnostics.Trace.Write (ciąg, ciąg) . Nazwa rejestratora zdarzenia to przekazana jako wartość dla nazwy kategorii do metody Write.

Oto moje dane pliku config ...

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 


    <!-- Setup the root category, add the appenders and set the default level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 
+0

+ 1- jak powiedziałeś, że to działa! – RichardOD

0

Dodałem plik Global.asax następujący wiersz, a to działa .. !! log4net.Config.XmlConfigurator.Configure();

+1

Er ... Miałem to już wymienione w moim pierwszym poście. Powiedziałem, że zrezygnowałem z używania Log4Net i używam NLog .. to SOOOO znacznie lepiej IMO :) I zawsze działa (plus jest nowszy i wciąż rozwija się - uwielbia). –

Powiązane problemy