Logging in ASP.NET: le migliori soluzioni open-source per tracciare gli errori

di Riccardo Golia, in ASP.NET,

Nello sviluppo delle applicazioni ASP.NET esistono una serie di aspetti che vengono spesso trascurati perchè non danno un riscontro immediato ed evidente. Generalmente infatti, quando siamo chiamati a sviluppare un sito o un'applicazione web, l'attenzione si sposta inevitabilmente sugli aspetti funzionali direttamente fruibili e richiesti, spesso per mancanza di tempo o di budget. Tuttavia è sempre buona cosa prestare attenzione anche a quegli aspetti trasversali, che, anche se a prima vista possono sembrare non indispensabili, nel medio-lungo periodo si possono rivelare fondamentali per fornire un prodotto o un servizio all'altezza delle aspettative. Il tracciamento degli errori tramite un sistema di logging è uno di questi aspetti.

ASP.NET offre direttamente una serie di funzionalità atte allo scopo. Esistono peraltro diverse soluzioni open-source che possono fare al caso nostro e che, nel corso dell'articolo, avremo modo di presentare e analizzare.

Cosa ASP.NET offre direttamente

Fin dalla sua primissima versione, ASP.NET include il debugger, un particolare componente che consente di tracciare il flusso di esecuzione delle richieste, verificando passo passo lo stato di variabili e oggetti.Il debugger consente di analizzare tutto il codice scritto in uno qualsiasi degli oggetti che compongono un'applicazione. Pertanto esso si rivela molto utile, oltre che comodo, quando il funzionamento di qualcosa non soddisfa lenostre aspettative, dato che rende possibile il controllo dello stato di qualsiasi oggetto, nel momento esatto in cui una certa parte di codice viene eseguita. Esistono diverse modalità per mettere in debug un'applicazione ASP.NET, la più semplice delle quali è quella di modificare direttamente la pagina, aggiungendo l'attributo Debug alla direttiva @Page.

Accanto al debugger, ASP.NET fornisce la possibilità di effettuare il tracciamento delle chiamate attraverso la classe Trace, con la possibilità di conoscere diverse informazioni circa il funzionamento di una pagina in esecuzione. La parte più utile è probabilmente quella che mostra i vari eventi della pagina e dei controlli e consente di verificare che l'ordine di rendering sia effettivamente quello atteso. Come nel caso del debugger, questa impostazione può essere fatta sia a livello di singola pagina, sia per l'intera applicazione.

Accanto a queste funzionalità, che potremmo definire di base, a partire dalla versione 2.0, ASP.NET ha introdotto un sistema di monitoraggio noto con il nome di Health Monitoring. Il funzionamento dell'Health Monitoring è molto semplice. Ogni applicazione ASP.NET solleva alcuni eventi in diversi momenti del suo ciclo di vita e il sistema di monitoraggio presenta una serie di provider che si agganciano a questi eventi e ne sfruttano i dati per costruire log, inviare notifiche o altro ancora.

In maniera più dettagliata i passi sono i seguenti:

  • l'applicazione ASP.NET genera un evento. Questo può essere dovuto a un errore non gestito, alla mancata autorizzazione di un utente o più semplicemente al riavvio del Worker Process;
  • ASP.NET controlla se l'evento è gestito dall'applicazione, interrogando la sezione system.web/healthMonitoring/eventMappings del web.config. In caso positivo, controlla nella sezione system.web/healthMonitoring/providers se esistono provider e in system.web/healthMonitoring/rules se questi sono registrati per rispondere all'evento in questione;
  • l'evento viene scatenato e tutti i provider collegati sono invocati, passando i dati del sistema al momento dell'eccezione, compresi quelli proprietari di ogni tipo di evento;
  • il provider riceve le informazioni e intraprende le azioni per cui è stato progettato.

Essendo basato sul Provider Model di ASP.NET, l'Health Monitoring permette di costruire un sistema complesso di notifiche esclusivamente utilizzando il file di configurazione, senza doversi preoccupare di modificare il codice, e fornisce una serie di provider già pronti all'uso. La presenza di classi base da cui derivare permette di estendere il sistema, rendendolo più attinente a quelle che possono essere le più svariate esigenze.

Purtroppo il fatto di essere componenti interni di ASP.NET limita la flessibilità di impiego e l'adattabilità delle funzionalità finora descritte. Per fortuna in circolazione esistono diverse soluzioni, per lo più open-source, che rappresentano una valida alternativa, fornendo funzionalità similari a costo zero, con maggiori possibilità di impiego, facilità d'uso e immediatezza. Nel corso dell'articolo prenderemo in considerazione i sistemi che oggi sono maggiormente utilizzati dagli sviluppatori di tutto il mondo. Questi componenti possono essere inseriti nelle nostre applicazioni sfruttando il NuGet Package Manager, direttamente all'interno di Visual Studio. Tra le varie librerie disponibili in circolazione, senza ombra di dubbio log4net rappresenta la più usata e apprezzata.

Figura 1

log4net: la libreria di logging per eccellenza

Prodotta da Apache Software Foundation e giunta alla versione 2 (versione dell'assembly 1.2.11), log4net rappresenta senz'altro una delle migliori soluzioni open-source (se non la migliore) per il tracciamento di eccezioni e per la gestione di notifiche. Il punto di forza di questo componente è rappresentato dalla sua estrema flessibilità e dalla facilità d'uso, che consentono un impiego immediato, praticamente a costo zero.

log4net consente di tracciare le eccezioni e gestire i messaggi di notifica secondo un certo ordine di pertinenza/gravità: Debug, Info, Warn, Error, Fatal. Ognuno degli elementi elencati definisce un livello di criticità e a ciascuno di essi può essere associato un diverso Logger, con scopi specifici. Per il tracciamento delle eccezioni generalmente si usa il livello Error, mentre per messaggi informativi o per il dump degli oggetti si ricorre a Info.

log4net è in grado di utilizzare diversi sistemi di tracciamento e notifica (denominati Appender). Ad ogni logger è associato un appender, che registra il flusso dei log verso un canale specifico (un file di testo, una finestra console, l'event log di Windows, posta elettronica, il sistema di tracciamento di ASP.NET, un database come SQL Server, Access, Oracle, DB2 e SQLite).

Per poter funzionare, i logger di log4net necessitano di essere configurati opportunamente, pertanto a essi devono essere necessariamente associati un livello di criticità e un appender. Questa associazione viene definita nel web.config, attraverso una sezione di configurazione che permette di indicare tutti i dettagli operativi (i settaggi dei vari appender e i pattern dei messaggi di log). L'esempio si riferisce alla configurazione di due logger per il tracciamento delle eccezioni e il dump degli oggetti. In entrambi i casi viene utilizzato un file di testo come buffer per registrare i log.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="ExceptionLogAppender" type="log4net.Appender.FileAppender">
      <file value="../Logs/Exceptions.log" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="--- %-5level ---%newline%date - %logger [%thread]%newline%message%newline" />
      </layout>
    </appender>
    <appender name="ObjectDumpAppender" type="log4net.Appender.FileAppender">
      <file value="../Logs/ObjectDumps.log" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="--- %-5level ---%newline%date - %logger [%thread]%newline%message%newline" />
      </layout>
    </appender>
    <logger name="Exceptions">
      <level value="ERROR" />
      <appender-ref ref="ExceptionLogAppender" />
    </logger>
    <logger name="ObjectDumps">
      <level value="INFO" />
      <appender-ref ref="ObjectDumpAppender" />
    </logger>
  </log4net>
</configuration>
3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc