domenica 28 ottobre 2012

Esempio di configurazione log4net

In una web application in ambiente .Net 2.5 la gestione della scrittura di log di tipo debug o di errore può essere affidata alla libreria log4net configurata nel seguente modo.
Il punto 4 rappresenta il tipo di output corrispondente a questa configurazione.

1)Fare riferimento alla libreria log4net.dll nel progetto (directory bin) e inserire il codice nel Global.asax
protected static log4net.ILog log;
private System.ComponentModel.IContainer components = null;
 
protected void Application_Start(object sender, EventArgs e) 
{
 InitializeComponent();
 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile));
 log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 log.Debug("Application_Start");
}

protected void InitializeComponent()
{    
 this.components = new System.ComponentModel.Container();
}

void Application_End(object sender, EventArgs e)
{
 log.Debug("Close Application");
}

void Session_Start(Object sender, EventArgs E)
{
 Application.Lock();
 Application.UnLock();
 log.Debug("Session start.");
}

2) Nel Web.Config
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

...
  
 <log4net>
  <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%d{dd MMM yyyy HH:mm:ss,fff} %-5p [%c] %m%n" />
    </layout>
  </appender>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value=" %m%n" />
    </layout>
  </appender>
  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log/example.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Size"/>
    <maxSizeRollBackups value="10"/>
    <maximumFileSize value="12MB"/>
    <staticLogFileName value="false"/>
    <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%d{dd MMM yyyy HH:mm:ss,fff} %-5p [%c] %m%n"/>
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="ConsoleAppender"/>
    <appender-ref ref="FileAppender"/>
  </root>
 </log4net>
</configuration>
3) Nel codebehind
protected static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

//create method and put inside this code

try{
 //code here
 log.Debug("Debug description");
}
catch (Exception ex)
{
 log.Error(ex);
}
4) Esempio di output sul file "example.log"

06 Sep 2010 10:05:28,140 ERROR [Project.Classname] Error description
02 Oct 2010 16:10:12,267 DEBUG [Project.Classname] Debug description