| OpenLab Studio | >= 0.13.x |
| OpenLab SDK | >= 0.13.x |
| Linguaggi | C# |
| Versione .NET | 8 |
Generale #
Un logger storage permette di implementare una destinazione per i messaggi di log. All’interno viene implementata la sintassi del messaggio e la destinazione. I logger storage possono essere usati per scrivere il messaggio di log in un file, in un database, etc.
Il codice completo è reperibile su Github, per il setup dell’ambiente di sviluppo consultare questa guida
Funzionamento #
Quando viene richiesta la scrittura di un messaggio nel o nei log alla classe LoggerStandard, questa passa un oggetto LoggerMessageData ad ogni logger storage con tutti i dati del messaggio, ogni Logger Storage provvede poi a formattare il messaggio e gli altri dati nel formato corretto e inviarli alla destinazione.
Implementazione di base #
In questo paragrafo viene implementato un logger storage che scrive i messaggi di log in un file.
Creare la classe LoggerStorageSimpleFile e un file per la configurazione config.json. La classe deve essere public e deve estendere la classe LoggerStorage
public class LoggerStorageSimpleFile : LoggerStorage
{
string fileString;
public LoggerStorageSimpleFile(IErrorManager errorManager, IEventsManager eventsManager, LoggerStorageDefinition def) : base(errorManager, eventsManager, storageDefinition)
{
fileString = def.config.GetProperty("file").ToString();
}
public override void deinit()
{
throw new NotImplementedException();
}
public override void init()
{
return;
}
public override LoggerMessageData[] read()
{
throw new NotImplementedException();
}
private string syntaxDigest(LoggerMessageData data)
{
return "["+ $"{data.date:dd/MM/yyyy hh:mm:ss tt}"+ "]["+data.Level+"] "+data.Message;
}
public override LoggerMessageData write(LoggerMessageData data)
{
using (StreamWriter outputFile = new StreamWriter(fileString, true))
{
outputFile.WriteLine(data);
}
return data;
}
}
Il codice sopra è basilare, implementa solamente il costruttore e metodo write, LoggerStandard chiama questo metodo, di ogni logger storage, quando deve scrivere un messaggio. Nel costruttore viene letta la configurazione json che è stata passata come argomento del tipo LoggerStorageDefinition in cui si aspetta di trovare una proprietà di nome file e un valore di tipo stringa che sarà il path assoluto del file di log in cui scrivere.
Configurazione #
E’ stato creato un file inizialmente per la configurazione di questo logger storage. Aprire il file config.json nel progetto e inserire una proprietà file con il path del file(In questo caso la directory principale di OpenLab Studio)
{
"file": "general.log"
}
Ora è necessario dire a OpenLab Studio di leggere questo logger storage e assegnarlo al logger, per fare questo nel file di configurazione di default di OpenLab Studio(config.json) aggiungere un oggetto json config con una proprietà path che specifica il path del file di configurazione del logger storage nell’array storages sotto logger, in questo modo
[...]
"logger": {
"enabled": true,
"loadStoragesOnStart": true,
"storages": [
{
"enabled": true,
"path": "plugins\\LoggerStoragesStandard\\LoggerStoragesStandard.dll",
"config": {
"path": "plugins\\LoggerStoragesStandard\\config.json"
}
}
[...]
]
Questo è uno screen del risultato

Pipe tra logger storage #
I dati del messaggio vengono incartanti nella classe LoggerStorageData l’istanza di questa classe , quando si invia un messaggio, entra come argomento del metodo write, ed esce come ritorno del medesimo metodo. I logger prende il valore di ritorno e lo passa come argomento al successivo logger storage, e cosi via.