Questo articolo spiega come ottenere una soluzione di logging portabile ed elegante grazie all'uso di NLog e SQLite, su piattaforma .NET e grazie all'uso di poche configurazioni.
NLog
NLog é una libreria di logging leggera e gratuita, supporta l'ecosistema .NET (Silverlight, Windows Phone etc…): http://nlog-project.org/. Costiusce un'opzione eccellente per un ampio range di scenari: dalle semplici utilities create nel quotidiano a servizi critici di produzione. Consente di avere multipli target, siano essi file, database, righe di comando, rete ed email.
Installazione
Package Manager:
PM> Install-Package NLog
Browser NuGet:
SQLite
SQLite é semplice motore di database, diventato famoso nel mondo mobile grazie alle sue qualitá: per essere eseguito non richiede alcun demone server ne configurazioni particolari. Il database é tipicamente rappresentato da un singolo file (estensione .db3), mentre la lettura e la scrittura vengono gestite dalle librerie specifiche a seconda della piattaforma in cui viene eseguito, ed esse sono solitamente open source.
Setup
L'interfaccia .NET piú celebre é System.Data.SQLite
Package Manager Console
PM> Install-Package System.Data.SQLite
NuGet browser
Il file di configurazione NLog
Opzionale ma raccomandabile: l'utilizzo di un file separato per le configurazioni NLog. Ad esempio in caso di danneggiamento dello stesso, sarebbe desiderabile che solo la parte di logging fallisse e non l'intera applicazione. Applicare i principi della separation of concerns, quando possibile, é sempre un'ottima cosa.
Installazione
Package Manager
PM> Install-Package NLog.Config
Browser NuGet
Eseguire NLog e SQLite in tandem
-
Predisponi il database SQLite, usa il browser di Database SQLite od un client che preferisci per creare il database, quindi esegui il seguente statement T-SQL per creare la tabella dei Log:
CREATE TABLE Log (Timestamp TEXT, Loglevel TEXT, Logger TEXT,
Callsite TEXT, Message TEXT)
-
Connetti l'App al database database, e modifica la configurazione NLog come segue:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="false">
<targets>
<target name="db" xsi:type="Database"
dbProvider="System.Data.SQLite" keepConnection="false"
connectionString="Data Source=${basedir}\Log.db3;Version=3;"
commandText="INSERT into Log(Timestamp, Loglevel, Logger, Callsite, Message)
values(@Timestamp, @Loglevel, @Logger, @Callsite, @Message)">
<parameter name="@Timestamp" layout="${longdate}"/>
<parameter name="@Loglevel" layout="${level:uppercase=true}"/>
<parameter name="@Logger" layout="${logger}"/>
<parameter name="@Callsite" layout="${callsite:filename=true}"/>
<parameter name="@Message" layout="${message}"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="db" />
</rules>
</nlog>
-
Inizia il logging
class Program {
static Logger log = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
log.Info("Logging like a boss");
}
}
Fatto!
Puoi rivedere il codice sorgente e scaricare un progetto di esempio qui:
https://github.com/aazzola/nlog-sqlite/