OneCore Docs
Breadcrumbs

Logování

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.

image-20241012-180248.png

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).

image-20241012-180341.png

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

image-20241012-180459.png

Obr. 2

image-20241012-180512.png

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