2012-03-21 17 views
26

Ho alcuni problemi durante la scrittura dei registri da log4net al file. Mi sembra di fare tutto come descritto nel manuale, ma non funziona. Ecco il mio file logging.config:Scrittura dei registri nel file

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

Si prega di aiutare con un esempio di file di configurazione che funziona effettivamente.

+3

scommetterei che sono diversi esempi in internet –

+1

Stai configurando l'impostazione Xml ... http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html – Lloyd

risposta

34

Non sembrano avere un elemento che fa riferimento <root> tuo 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

Grazie, era un punto. Inoltre ho scoperto che puoi mettere per reindirizzare tutti i log al file. –

17

Hai chiamato il metodo configure all'avvio dell'applicazione per la prima volta?

log4net.Config.XmlConfigurator.Configure(); 

Se sì. Dovresti essere bravo. Controlla le autorizzazioni del file sul disco che stai scrivendo.

Se si desidera è possibile abilitare il debug interno di log4net anche per capire cosa non va.

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

+0

puoi anche abilitare il debug interno di log4net, come dettagliato qui: http://logging.apache.org/log4net/release/faq.html#troubleshooting – paul

+0

Per un'app Web .NET, questa linea deve essere richiamata una sola volta? vale a dire in Application_Start() del file Global.asax? O all'inizio di ogni sessione di utenti, ad esempio Session_Start()? – Seany84

+0

@paul: l'ho aggiunto alla mia risposta. Grazie Paul – Shyju

6

Ci sono due cose che si possono fare:

Uno, se si desidera utilizzare un file di configurazione separato, aggiungendo quanto segue a voi app.config archiviarlo configurerà la registrazione automaticamente.

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

In caso contrario, è necessario avviare la registrazione all'inizio dell'applicazione.

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

Ecco una guida completa passo-passo per l'aggiunta di Log4Net al progetto, in Visual Studio 2012 e .NET 4.5.

  1. Aggiungi una nuova app per console C# alla tua soluzione.

  2. Selezionare Tools >> Library Package Manager >> Manage NuGet Packages For Solution e cercare log4net. Installalo e seleziona i progetti a cui desideri aggiungere i riferimenti 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. Aggiungi log4.config, fare clic destro e selezionare Properties quindi selezionare 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. Modifica App.Config in modo che corrisponda il seguente:
<?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. Eseguire il programma e osservare il file log.txt creato nell'output directory \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. In futuro, se si desidera aggiungere log4net ad un altro progetto, selezionare Tools >> Library Package Manager >> Manage NuGet Packages For Solution selezionare log4net e cliccare Manage quindi spuntare i progetti che si desidera aggiungere alla log4net. enter image description here

+0

Solo una nota sulle configSections: "Se questo elemento si trova in un file di configurazione, deve essere il primo elemento figlio dell'elemento ." https://msdn.microsoft.com/en-us/library/aa903350(v=vs.71).aspx – unicorn2

+0

potresti elaborare sul rotolo le impostazioni di App.config? – jxramos

+0

@jxramos Le impostazioni in app.config controllano tutto ciò che riguarda la registrazione, incluso se scrive su un file, quale formato è ogni linea, se scrive sulla console, ecc. Probabilmente è più semplice guardare i documenti di log4net per tutti le opzioni. – Contango

2

Fantastic. Le risposte sono corrette ... tranne che non stavano lavorando per me

cercato in rete e, infine, hanno scoperto che mi mancava la seguente riga nel Assembly.cs:

[assembly: log4net.Config.XmlConfigurator] 
Problemi correlati