Logování Web API

Běh ABRA API je možné logovat. A to jednak jeho Java část pomocí konfiguračního souboru APIServer.yaml, který je v kořenovém adresáři instalace systému ABRA Gen, a pak dále na úrovni business logiky pomocí souboru NEXUS.CFG.

Součástí obou logů je tzv rid, generované pomocí hlavičky X-Request-ID, které umožňuje snadno identifikovat jak serverovou, tak BO část požadavku v obou takto vytvořených lozích.

Obecná konfigurace nastavení logování systému ABRA Gen viz kap. Logování běhu aplikace.

Doporučená konfigurace nastavení logování na úrovni v souboru NEXUS.CFG je následující:

[Logs]
LogsDirectory=<lokální cesta, ideálně SSD>
Level=3

[Log.ExceptionHook]
Enabled=1

[Log.SysLog]
Enabled=1
Level=6

[Log.WA~Monitoring]
Enabled=1
Level=6

[Log.WA/RESTApplication]
Enabled=1
Level=6

[Log.WA/RESTApplication/Pool]
Enabled=0

[Log.WA/RESTApplication/Memory]
Enabled=0

[Log.WA/RESTApplication/ProfilingRequest]
Enabled=1

Parametr Log ProfilingRequest je nejdůležitěšjí. Je v něm zahrnut buď obsah požadavku i odpověď (Level=6) nebo jen základní informace bez těla požadavku a odpovědi (Level=5). V případě, že provádění požadavku zamrzne, loguje se zde callstack threadu, který požadavek provádí a může napovědět, kde je problém.

Při zapnutí parametru ProfilingRequest je třeba nastavit na enabled i nadřízený log [Log.WA~Monitoring]:

[Log.WA~Monitoring]
Enabled=1
Level=6

[Log.WA/RESTApplication/ProfilingRequest]
Enabled=1

Log SysLog loguje informace ze startu aplikace (tj. s jakými parametry byl program spuštěný, nastavení některých interních proměnný a pod.).

Logy Pool a Memory jsou nízkoúrovňové a jejich zapnutí má smysl jen při řešení specifických problémů.

Pokud je třeba omezit logování jen za program, který provádí API dotazy, je třeba doplnit do sekce Logs:

AllowedApps=java.

Pokud je třeba v logu výjimek vypsat všechny výjimky, je třeba doplnit do sekce Log.ExceptionHook vyloučené třídy a nastavit je na nic, jinak se přebírají přednastavené:

ExcludedNxErrorCodes=
ExcludedExceptionClasses=

Threshold je čas v ms, při jehož překročení se dotaz zaloguje. SQLOutputLength je délka SQL dotazu, která se zaloguje, 0 znamená celý dotaz.

Existuje zajímavý log, který na aplikačním serveru loguje SQL dotazy, které překročí nastavený čas. Použitím tohoto logu se dá zjistit, jestli za případnou pomalostí API dotazů nestojí databáze:

[Log.ProfilingSQL]
Enabled=0
Level=6
Threshold=1000
SQLOutputLength=0