Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Log4Net

From Aino Wiki

Jump to: navigation, search

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


Visual Studio


Parole chiave:

Author