2012-03-21 26 views
26

Mam pewne problemy podczas zapisywania logów z log4net do pliku. Wydaje mi się, że robię wszystko zgodnie z opisem w instrukcji, ale to nie działa. Oto mój plik logging.config:Zapisywanie logów do pliku

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %message%newline" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Proszę o pomoc przy pliku konfiguracyjnym, który faktycznie działa.

+3

ja bym zakład, że kilka przykłady w Internecie –

+1

Czy konfigurujesz ustawienia Xml ... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd

Odpowiedz

34

Nie wydają się mieć <root> element, który odwołuje swoje appender:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
     <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="INFO" /> 
     <appender-ref ref="RollingFileAppender" /> 
     </root> 
    </log4net> 
</configuration> 
+3

Dzięki, to był punkt. Również odkryłem, że możesz umieścić , aby przekierować wszystkie dzienniki do pliku. –

17

Czy wywołałeś metodę configure, gdy aplikacja uruchamia się po raz pierwszy?

log4net.Config.XmlConfigurator.Configure(); 

Jeśli tak. Powinieneś być dobry. Sprawdź uprawnienia do pliku na dysku, który piszesz.

Jeśli chcesz, możesz włączyć wewnętrzne debugowanie log4net również, aby dowiedzieć się, co jest nie tak.

http://logging.apache.org/log4net/release/faq.html#troubleshooting

+0

możesz również włączyć wewnętrzne debugowanie log4net, jak szczegółowo tutaj: http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul

+0

W przypadku aplikacji sieci web .NET ta linia musi zostać wywołana tylko raz? to jest w Application_Start() pliku Global.asax? Lub na początku każdej sesji użytkownika, np. Session_Start()? – Seany84

+0

@paul: Dodano to do mojej odpowiedzi. Dzięki Paul – Shyju

6

Są dwie rzeczy, które możesz zrobić:

One, jeśli chcesz korzystać z oddzielnego pliku konfiguracyjnego przez dodanie następujących do ty app.config złożyć go skonfiguruje zalogowaniu automatycznie.

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 

W przeciwnym razie należy zainicjować logowanie na początku aplikacji.

//Initiate logging based on web.config file 
log4net.Config.XmlConfigurator.Configure(); 

// Create a logger for use in this class 
log4net.ILog log4 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
69

Oto kompletny przewodnik krok po kroku do dodawania log4net do projektu, w ramach programu Visual Studio 2012 i .NET 4.5.

  1. Dodaj nową aplikację konsoli C# do swojego rozwiązania.

  2. Wybierz Tools >> Library Package Manager >> Manage NuGet Packages For Solution i wyszukaj log4net. Zainstaluj go i wybierz projekty, do których chcesz dodać referencje log4net. enter image description here

  3. Edit Program.cs:

using System; 
namespace Log4Net 
{  
    class Program 
    { 
     private static readonly log4net.ILog log = log4net.LogManager.GetLogger 
       (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n"); 
      log.Info("Info logging"); 
      try 
      { 
       throw new Exception("Exception!"); 
      } 
      catch (Exception e) 
      { 
       log.Error("This is my error", e); 
      } 
      Console.WriteLine("[any key to exit]"); 
      Console.ReadKey(); 
      } 
     } 
    } 
} 
  1. Dodaj log4.config, kliknij prawym przyciskiem i wybierz Properties następnie wybierz Copy to Output Directory - Copy If Newer.
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="250KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 
  1. Edit App.Config tak pasuje następujący:
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <appSettings> 
     <add key="log4net.Config" value="log4.config"/> 
     <add key="log4net.Config.Watch" value="True"/> 
     <add key="log4net.Internal.Debug" value="False"/> 
    </appSettings> 
</configuration> 
  1. Uruchom program i obserwować plik log.txt utworzony na wyjściu \bin\Debug\:

    2013-08-10 11:54:26,798 [10] INFO Log4Net.Program [(null)] - Info logging 
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error 
    System.Exception: Exception! 
        at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14 
    
  2. W przyszłości, jeśli chcesz dodać log4net do innego projektu, wybierz Tools >> Library Package Manager >> Manage NuGet Packages For Solution wybrać log4net i kliknij Manage następnie zaznacz Projekty, które chcesz dodać do log4net. enter image description here

+0

Wystarczy notatkę na configSections: "Jeśli ten element jest w pliku konfiguracyjnym, musi to być pierwszy element podrzędny elementu ." https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2

+0

Czy mógłbyś rozwinąć w trakcie odtwarzania ustawień App.config? – jxramos

+0

Ustawienia @jxramos w app.config kontrolują wszystko, co należy zrobić z logowaniem, w tym czy zapisuje do pliku, jaki format ma każda linia, czy zapisuje na konsoli itp. Prawdopodobnie łatwiej jest zajrzeć do dokumentacji log4net dla wszystkich opcje. – Contango

2

Fantastyczny. Odpowiedzi są poprawne ... poza tym, że nie działa mi

Szukano netto i ostatecznie odkrył brakowało mi następującą linię w Assembly.cs:

[assembly: log4net.Config.XmlConfigurator]