CSharp:Log4Net
From Aino Wiki
Contents
Installazione e configurazione
Info: stackify.com
Dal package manager di NuGet, aprire la console e digitare:
PM> Install-Package log4net
A questo punto è auspicabile mettere il file di configurazione fuori dal Web.config o App.config, creare nella root del progetto il file log4net.config e una soluzione è il seguente contenuto:
<root> <level value="ALL" /> <appender-ref ref="console" /> <appender-ref ref="file" /> </root> <appender name="console" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level %logger - %message%newline" /> </layout> </appender> <appender name="file" type="log4net.Appender.RollingFileAppender"> <file value=".\log\WEBAPI_Prova.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="5" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> </layout> </appender> </log4net>
Per poter leggere questo file di configurazione occorrerà imporlo esplicitamente quindi inserire nell'assemblyInfo.cs , in fondo, la seguente:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
Il layout produrra il seguente output:
2017-09-21 10:47:54,669 [8] INFO WebAPI_ExBase.Controllers.ProductsController Testo scritto da programma
Parametri utili
Data UTC
Il parametro ABSOLUTE indica il formato della data
<conversionPattern value="%utcdate{ABSOLUTE} UTC %c{1} - %m%n" />
Metodo della classe
Il parametro da aggiungere al layout è: %M
Attenzione perché rallenta le prestazioni e quando si compila in "Release" non si visualizza nulla.
Utente corrente
%identity - This is the user name of the current user using the Principal.Identity.Name method. %username - This outputs the value of the WindowsIdentity property.
Path
<file value="${LOCALAPPDATA}\GojiSoft\GojiLog\log.txt" />
Esempi
Esempio 1
Esempio di configurazione all'interno del Web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <!-- etc --> <log4net debug="flase"> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value=".\log\eFabbisognoweb.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%p %d %rms %c{1} %M - %m%n" /> </layout> </appender> <root> <level value="INFO" /> <appender-ref ref="RollingLogFileAppender" /> </root> </log4net> <!-- etc --> </configuration>
Che produce l'effetto:
INFO 2017-02-15 17:41:18,782 28085ms eSprechiProxy SalvaFabbisognPrevisioneCUCE - Start. IDImpianto 21176, data_da 13/02/2017, data_a 19/02/2017, TEST? False. ERROR 2017-02-15 17:41:45,948 55251ms eSprechiProxy SalvaFabbisognPrevisioneCUCE - Eccezione generica. HR: -2146233088, Esistono già fabbisogni calcolati o ordini inviati per la settimana di competenza. Impossibile continuare.. Tipo Operazione CUCE , rowsAffected 0. Linea 4142 ERROR 2017-02-15 17:41:57,038 66341ms FabbisognoController Post_SalvaListaCUCE - Errore -2146233088, Esistono già fabbisogni calcolati o ordini inviati per la settimana di competenza. Impossibile continuare. Linea 4406. INFO 2017-02-15 17:41:57,040 66343ms FabbisognoController Post_SalvaListaCUCE - Fine. RowsAffected 0. Elapsed 0.
Esempio 2
Questo esempio consente di tracciare il file di codice e la linea da cui li scrive il log (utile per le eccezioni) solo se compilato in Debug.
Vedi il layout: (%file:%line)
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <!-- etc --> <log4net> <!-- Appender Logger DEBUG and FATAL--> <appender name="RollingFileLog" type="log4net.Appender.RollingFileAppender"> <file value=""/> <appendToFile value="true"/> <!-- roll style for size and data--> <rollingStyle value="Composite"/> <!-- roll only day --> <datePattern value="yyyyMMdd"/> <!-- Max number of file in backup--> <maxSizeRollBackups value="30"/> <!-- roll for size --> <maximumFileSize value="500MB"/> <!--<staticLogFileName value="true" />--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="DEBUG"/> <levelMax value="FATAL"/> </filter> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %5level (%file:%line)- %C{1}.%M - %message%newline"/> </layout> </appender> <root> <level value="DEBUG"/> <appender-ref ref="RollingFileLog"/> </root> </log4net> <!-- etc --> </configuration>
Che produce l'effetto:
2017-01-13 12:10:23,660 [10] INFO (D:\Documenti\Development\FOX.Dashboard\MainWindow.xaml.cs:171)- MainWindow.MainWindow_Loaded - After Init System 2017-01-13 12:10:27,007 [10] ERROR (D:\Documenti\Development\FOX.Dashboard.Base\Security\UserLogin.cs:214)- UserLogin.FOXLogin - USERLOGIN_EXCEPTION: Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at Fox.DataObjects.AdoNet.Db.CreateConnection() in D:\Documenti\Development\Fox.DataObjects\ADO.NET\Db.cs:line 92 etc 2017-01-13 12:10:27,170 [10] INFO (D:\Documenti\Development\FOX.Dashboard\MainWindow.xaml.cs:173)- MainWindow.MainWindow_Loaded - After UserLogin.User.FOXLogin 2017-01-13 12:10:27,663 [10] DEBUG (D:\Documenti\Development\FOX.Dashboard\MainWindow.xaml.cs:201)- MainWindow.MainWindow_Loaded - PRIMA DI
Problemi e soluzioni
Non si trova il file di Log
In caso di applicazioni Web che usano IIS Express e non IIS, la cartella di partenza dell'eseguibile non è quella in cui è l'eseguibile di progetto ma quella dell IIS Express... non so dove precisamente.
Conviene impostare il percorso assoluto.
Mappa e Link
C# | Logging | Librerie di terze parti PlugIn
Parole chiave: