Logování je zajištěno pomocí NuGetových balíčku Serilog.
Konkrétně se jedná o následující balíčky:
-
Základní:
-
Install-Package Serilog.AspNetCore -Version 2.1.1
-
Install-Package Serilog.Settings.Configuration -Version 3.0.1
-
-
Balíčky k jednotlivým kanálům (sinks):
-
Install-Package Serilog.Sinks.Console -Version 3.1.1
-
Install-Package Serilog.Sinks.File -Version 4.0.0
-
Install-Package Serilog.Sinks.ApplicationInsights -Version 2.6.0
-
Seznam balíčků k jednotlivým kanálům je zde: https://github.com/serilog/serilog/wiki/Provided-Sinks
Konfigurace
Díky instalaci balíčku Serilog.Settings.Configuration je možné konfigurovat logování skrz soubor appsettings.json, kde je možné nastavit jednotlivé kanály (sinks). Celé nastavení má jednoduchou strukturu, kterou lze snadno konfigurovat (je ale vhodné pracovat přímo s kódem).
-
Serilog
-
Using - přídání jednotlivých balíčků
-
MinimumLevel - nastavení úrovně logování (globální)
-
WriteTo - konfigurace jednotlivých kanálů
-
Name - název metody (např. Console, File, ApplicationInsightsTraces...)
-
Args - parametry metody výše (vždy název parametru a jeho hodnota)
-
-
Příklad
"Serilog": {
"Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "Logs\\log.txt",
"restrictedToMinimumLevel": "Error",
"fileSizeLimitBytes": null,
"retainedFileCountLimit": 30,
"rollingInterval": "Day",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}{NewLine}{NewLine}"
}
},
{
"Name": "Console"
},
{
"Name": "ApplicationInsightsTraces",
"Args": {
"instrumentationKey": "5ad9a27c-7dc6-4640-ba94-7321e499a415",
"restrictedToMinimumLevel": "Information"
}
}
]
}
Kanály
Zde se nachází popis jednotlivých kanálů pro logování a jejich využití.
Console
Jedná se o základní logovací kanál, který vývojáři značně usnadňuje vývoj aplikace.
Zdroj: https://github.com/serilog/serilog-sinks-console
File
Jedná se o logování do souboru, který je v případě potřeby možné stáhnout přes FTP. Ovšem tento postup není možné napojit na jakoukoliv automatiku - odeslání emailu v případě kritické chyby.
U tohoto kanálu lze nastavit různé parametry, které jsou popsány v odkazu níže. Za zmínku určitě stojí parametr rollingInterval, který určuje, jak často se má vytvářet nový soubor (např. každou hodinu, každý den apod.) společně s parametrem retainedFileCountLimit, u kterého se nastaví maximální počet souboru (nejstarší jsou automaticky mazány).
Zdroj: https://github.com/serilog/serilog-sinks-file
poznámka: Tento přístup nebude použitý
ApplicationInsights
Jedná se o kanál, který umožňuje zápis do Application Insights. Application Insights je rozšiřitelná
služba pro správu výkonu aplikací (APM). Je určena webovým vývojářům na více platformách. Slouží k monitorování živé webové aplikace.
Po vytvoření zdroje Application Insights v portálu Azure v sekci Properties najdeme Instrumentation key, který slouží k propojení Appliacation Insights a aplikace. Po zaregistrování v appsettings.json umožňuje serilog zasílat zprávy do Application Insights jako EventTelemetry, TraceTelemetry či ExceptionTelemetry.
-
EventTelemetry
-
Použití pro logování uživatelských akcí či událostí
-
Monitorování výkonu
-
Schéma:
-
Name (Max length: 512 characters) - slouží pro grupování zpráv
-
Custom properties (Max key length: 150 Max value length: 8192)
-
-
-
TraceTelemetry
-
Diagnostické logy
-
Schéma:
-
Message (Max length: 32768 characters)
-
Severity level (Value can be Verbose, Information, Warning, Error, Critical)
-
Custom properties (Max key length: 150 Max value length: 8192)
-
-
-
ExceptionTelemetry
-
Logování vyjímek
-
Pokud log obsahuje jakoukoliv vyjímku bude vždy odeslán jako ExceptionTelemetry
-
Statistiku logů pak lze nalézt v Application Insights v sekci Investigate položka Metrics, kde je možné logy sledovat, vytvářet nad nimi filtry apod. Lepší variantou je proklidnout se dále do Classic Explorer, kde je možné vytvořit si vlastní grafy a nastavení upozornění (viz obr. 1).
Logy samotné lze vyhledat pomocí položky Search v sekci Investigate, kde stačí zvolit filtry Trace a Exception a další parametry, které nás zajímají (viz obr. 2). Na BE je možné logovat i celé objekty, jejichž parametry jsou poté dostupné ve vyhledávání. To může být výhodně pro uložení vstupů před kalkulací.
Výhodou oproti všem ostatním kanálům (sinks) je možnost navázání dalšího procesingu při obdržení dat - např. odeslání emailu odpovědné osobě v případě výskytu vyjímek či překročení úložného prostoru.
Obr. 1
Obr. 2
Zdroje:
https://github.com/serilog/serilog-sinks-applicationinsights
https://hryniewski.net/2017/12/10/structured-logs-with-serilog-and-application-insights/
https://docs.microsoft.com/cs-cz/azure/application-insights/app-insights-overview
AzureTableStorage
Není bohužel multiplatformní. Jedná se o zápis do Table Storage. Vstupem je storageTableName a connectionString. Nelze napojit na automatiku.
Zdroj: https://github.com/serilog/serilog-sinks-azuretablestorage
Seznam logovaných událostí
-
CalculationService:
-
Log Calculation model after Initialization
-
Log every exception thrown while calculation process
-
Log result configurations list
-
-
ExcelExportService:
-
Log exception while processing Calculation List
-
Log exception while processing Offer
-
-
Pdf Export:
-
Log exception wile rendering pdf Offer
-
-
EmailSender:
-
Log exception while sending emails
-
-
ImageHelper:
-
Log exception while saving Base64 Image
-
-
Global exception catcher:
-
Log exception
-