Logování běhu aplikace
Všechny součásti systému IS FLORES obsahují logovací subsystém, který umožňuje podrobné logování činnosti aplikace do souborů. Logování používá typicky technik dodavatele systému při problémech s aplikací, při hledání řešení pro optimalizaci dotazů apod. Logování může použít i zkušený uživatel, avšak v tomto případě doporučujeme, aby své kroky konzultoval s dodavatelem systému. Konfigurace logování se provádí pomocí souboru NEXUS.CFG v sekci logování. Ve stanoveném intervalu (výchozí hodnota je 1 minuta) aplikace čte tento soubor a změny v parametrech logování okamžitě aplikuje, proto je možné logování zapínat a vypínat i za běhu aplikací.
Vzhledem k tomu, že zapnuté logování má negativní vliv na výkon aplikací, doporučujeme v produkčním systému při plné zátěži logování zapínat jen na nezbytně nutnou dobu.
V sekci logování souboru Nexus.cfg jsou mj. k dispozici parametry Enabled pro povolení/zakázání daného druhu logování, Level pro nastavení úrovně logování, LogDirectory pro nastavení adresáře pro ukládání logovacího souboru, nastavení, zda logovat do souboru či do paměti aplikačního serveru a řada dalších:
Aplikace při svém běhu generuje velký počet hlášení, které se při vypnutém logování zahazují, což nijak neovlivňuje výkon aplikace. Tato hlášení lze směrovat do souboru, pro každou aplikaci (klient IS FLORES, aplikační server na Windows AppServer/AppServerS či na Linuxu AppServerL apod.) se hlášení logují do samostatného souboru, při každém novém spuštění aplikace se zakládá nový soubor. Jednotlivá hlášení jsou kategorizována podle místa, kde vznikla (třída), a podle důležitosti (úroveň). Hlášení je možné filtrovat podle kategorií tak, aby se v logu objevila hlášení z pouze vybraných tříd a do určené úrovně důležitosti.
Konfigurace logování má hierarchickou strukturu a provádí se pomocí těchto sekcí v souboru NEXUS.CFG, vyhodnocení parametrů logování se provádí ve zde uvedeném pořadí:
Pro zapnutí samotného logování. Nastavení platné pro všechny třídy a všechny počítače. Tato sekce zároveň umožňuje nastavení globálních parametrů ovlivňujících logování platných pro všechny počítače, jako je např. formát jména logovacích souborů apod.
Zapnutí logování všeho:
[Logs]
LogsDirectory=<cesta platna z pohledu aplikace>
Enabled=1
Zapnutí logování jen SQL:
[Logs]
LogsDirectory=<cesta platna z pohledu aplikace>
[Log.SQL]
Enabled=1
Level=6
Vypnutí logování všech výjimek
[Log.ExceptionHook]
Enabled=0
Nastavení pro jednu <třídu>, platí pro všechny počítače. Seznam možných tříd je uveden v samostatné kapitole níže.
Nastavení pro všechny třídy, platí pro uvedený <počítač>. Jméno počítače musí být uvedeno jménem nikoliv IP adresou. Na Linuxu lze zjistit jméno počítače pomocí "hostname". Klienti v terminálovém provozu se identifikují jako <jméno_serveru>.<jméno_stanice>, např. "SERVER.UCTARNA". Tato sekce zároveň umožňuje nastavení globálních parametrů, podobně jako sekce [Logs], avšak platných pro uvedený počítač. Zde je například výhodné definovat cestu pro soubory s logy apod.
Nastavení pouze pro jednu <třídu>, platí pro uvedený <počítač>.
A) pokud je v konfiguračních nastaveních nějaká chyba (špatná cesta, překlep v názvu parametru), tak je takové nastavení ignorováno. Jedná-li se o podstatnou část pro logovací systém, může tato skutečnost vést až k jeho nefunkci. Žádné vizuální projevy tohoto stavu nejsou záměrně řešeny.
b) z následujících nastavení bude patrné, že logování může být zapnuto jak pro klientskou aplikaci (např. IS FLORES.exe) tak i pro nějakou serverovou část aplikace (např. AppServers.exe). Obojí způsobí proces logování, ale každé na jiném místě. S jedním a tímtéž nastavením logování v nexus.cfg tedy bude aplikace vytvářet své logy na klientské stanici zatímco aplikační server bude logovat na serveru.
Tyto parametry jsou platné pouze pro sekci [Logs] a [<počítač>.Logs].
Nastavení intervalu, v jakém bude konfigurace logování načtena. Hodnota se zadává v sekundách a minimální hodnota je 10 sekund.
Implicitní hodnota je 60 sekund.
Nastavení cesty, do které se mají ukládat souboru logů.
Implicitní hodnota je cesta do temp adresáře. V případě windows to je obsah env.proměnné TEMP (typicky c:\Documents and settings\aktuální_uživatel\Local Settings\Temp). Na Linuxu je typické umístění v cestě /tmp. Pro rychlejší nalezení logů doporučujeme si přepsat na nějakou jednoduchou cestu např. C:\Logy.
Pozor, cesta musí existovat. Probíhá test na existenci cesty. V případě, že cesta neexistuje nebo do ní nelze zapisovat, logy se nevytvářejí a logování je zastaveno. Po přenačtení konfigurace (která probíhá každých cca 60s, resp. dle intervalu nastaveného v RefreshConfigurationInterval) systém pokus zopakuje a pokud je cesta stále chybná, je logování opět zastaveno. Pokud mezitím byla konfigurace opravena a zadaná cesta je v pořádku, logování se rozběhne.
Definuje velikost logu v bytech, po jehož překročení dojde k přesunutí aktuálního souboru do zálohy a začne se vytvářet nový soubor. Soubor se zálohou má stejné jméno jako původní soubor logu, pouze se doplní o příponu s pořadovým číslem zálohy. Případné existující soubory jsou přečíslovány na číslo o jedničku vyšší.
Implicitní hodnota je 1 073 741 824 B, tj. 1GB.
Počet souborů záloh. Soubor odsunutý do zálohy dostane ke jménu souboru jako příponu číslo. Čím větší číslo, tím se jedná o starší logy. Starší soubory než nastavený počet jsou zapomenuty.
Implicitní hodnota je 5.
Maska pro sestavení jména logovacího souboru. V masce se mohou objevit následující značky:
- %s:0 = časová značka založení souboru
- %s:1 = jméno aplikace bez přípony, tj. název procesu
- %s:2 = PID procesu
- %s:3 = jméno počítače
- %s:4 = identifikace systému (např. IS FLORES)
Pokud jsou uvedeny všechny parametry v tomto pořadí, je možné použít pouze značky %s bez čísla. Doporučujeme zadat si v tomto parametru příponu .txt aby jednotlivé logy bylo možné na windows rychle zobrazovat a nebylo nutné vybírat aplikaci pro zobrazení.
FileNameFormat=LOG%4:s %0:s %1:s %2:s %3:s.txt
PID procesu využijete např. při logování autoserveru, pokud chcete zabránit zápisu různých slave procesů do jednoho log souboru.
Implicitní hodnota je "%s %s %s %s %s.log".
Formát časové značky ve jménu souboru logu. Je možná libovolná kombinace následujících značek (příklady v závorce pro 1.2.2005 06:07:08.009):
- d = den (1)
- dd = den s vodícími nulami (01)
- ddd = zkratka dne v týdnu (Wed)
- dddd = den v týdnu (Wednesday)
- m = měsíc (2)
- mm = měsíc s vodícími nulami (02)
- mmm = zkratka názvu měsíce (Feb)
- mmmm = název měsíce (February)
- yy = poslední dvojčíslí roku (05)
- yyyy = rok (2005)
- h = hodina (6)
- hh = hodina s vodícími nulami (06)
- n = minuta (7)
- nn = minuta s vodícími nulami (07)
- s = sekunda (8)
- ss = sekunda s vodícími nulami (08)
- zzz = milisekunda s vodícími nulami (009)
Implicitní hodnota je "yy-mm-dd hh-nn-ss".
Pozor: Časová značka funguje na datum a čas spuštění příslušné aplikace. Z toho vyplývá, že druhé spuštění nějaké aplikace (např. IS FLORES.exe) vždy znamená LOG soubor nového jména.
Tyto parametry jsou platné pro všechny sekce.
Pokud je nastaveno na 1, je logování aktivní
Implicitní hodnota je 0. Platí pro všechny třídy (v dřívějších verzích byla u některých tříd výjimka (např. SysLog), kdy jejich logování bylo implicitně zapnuté).
Úroveň informací, které se mají logovat. Platí, že čím vyšší číslo, tím více informací se bude logovat. Možné hodnoty jsou:
- 0 (System) - systémové informace, typicky spuštění a ukončení aplikací
- 1 (Critical) - kritické chyby
- 2 (Error) - chyby
- 3 (Warning) - varování
- 4 (Notice) - běžná hlášení
- 5 (Info) - rozšiřující informace
- 6 (Debug) - ladící informace
Implicitní hodnota je 0.
Seznam aplikací, jejichž činnost se má logovat. Jména aplikací se uvádějí bez přípony a oddělují středníkem, hodnota "*" znamená všechny aplikace.
AllowedApps=FLORES ;AppServerS;FLORES OLE;DBTOOL
Implicitní hodnota je "*".
Formát časové značky hlášení v logu, viz popis parametru FileNameStamp.
Implicitní hodnota je "ddd dd. hh:nn:ss.zzz".
Formát řádky v logovacím souboru, jedná se o libovolný text, ve kterém se mohou objevit následující značky:
- %s:0 = časová značka hlášení
- %s:1 = číslo úrovně
- %s:2 = číslo threadu
- %s:3 = identifikace třídy
Text hlášení není možné tímto nastavením ovlivnit. Vždy je přidán na konec řetězce.
Pokud jsou uvedeny všechny parametry v tomto pořadí, je možné použít pouze značky %s bez čísla.
LineFormat=%0:s [%1:s] %2:s (%3:s)
Implicitní hodnota je "%s [%s] %s (%s)"
Určuje, kam se bude log ukládat. Možné hodnoty jsou: file a memory. Lze i kombinovat dohromady, v tom případě se oddělí čárkou nebo středníkem.
file - výstup se bude ukládat do souboru tak, jako dosud. Je to také výchozí volba pro většinu logovacích tříd.
memory - výstup se bude ukládat do paměti aplikačního serveru. Zobrazit ho lze pomocí aplikace AppServerProp.exe.
Target=file,memory
Platí jen, pokud je v Target uvedeno memory a určuje, kolik posledních zápisů do logu se bude uchovávat na apl. serveru. Tato hodnota se vztahuje k jednomu spojení na apl. server.
Výchozí hodnota je 50.
Systémová hlášení.
Hlášení subsystému pro přidělování unikátních identifikátorů.
Informace o perzistentních kanálech.
Podrobné informace z obnovy dat.
Informace z update databáze.
Hlášení z přenosové vrstvy (stub objekty).
Hlášení z nejnižší TCP vrstvy.
Hlášení z přenosové vrstvy (proxy objekty).
Informace o databázových spojeních a transakcích.
Vysokoúrovňové zprávy o persistentních akcích (objekt uPersist).
Informace o datasetech v DynSQL.
Logování SQL - načítání BO.
Logování SQL - počet BO.
1. Logování SQL - testování existence záznamu.
Logování SQL - vytváření záznamu BO.
Logování SQL - opravy záznamu BO.
Logování SQL - smazání záznamu BO.
Logování SQL - persistentní akce, které čtou data (SELECT).
Logování SQL - persistentní akce, které mění data včetně DML.
Speciální skupina pro logování pouze těch SQL příkazů, které překročí určitý čas.
Má navíc tyto parametry:
Threshold - doba v ms. při jejímž překročení se SQL příkaz zaloguje, defaultně je 60000
SQLOutputLength - počet znaků SQL příkazu, které se zalogují, defaultně je 20. Při nastavení na 0 se zaloguje celý SQL příkaz.
Logování použitých licencí pro lepší diagnostiku využití licencí.
Je dostupný od Level=4.
Pomocná skupina zjednodušující ovládání komunikace s SQL serverem. V sekci konfigurace skupiny lze použít pouze parametry Enabled a Level, přičemž se jimi najednou konfigurují všechny třídy, které patří do téže skupiny.
Část souboru NEXUS.CFG s konfigurací logování probíhajících SQL:
[Logs]
LogsDirectory=C:\Logs <cesta platna z pohledu aplikace>
[Log.SQL]
Enabled=1
Level=6
Logování
Logování XML zpráv posílaných a obdržených v rámci komunikace s Veřejným rozhraním pro e-Podání (VREP) a pro lepší diagnostiku problémů při komunikaci s portálem.
Logování dostupných informací o logovacím subsystému.
Logování zpráv windows v hlavním okně aplikace a některých dalších prvcích.
Má navíc tyto parametry:
- MsgMin - min. číslo zprávy, od které se bude logovat
- MsgMax - max. číslo zprávy, od které se bude logovat
- SourceContain - text, který musí obsahovat text zprávy, aby se zalogovala
Při Level=2 se loguje jen, pokud nastane v obsluze zprávy výjimka, při Level=6 loguje všechny zprávy, které do obsluhy zpráv vstoupí
Logování vytvoření a zrušení některých objektů.
Logování modulu SCM. (Např. časy načítání jednotlivých datových zdrojů do SQL Lite, dotazování SQL Lite, apod.)
Logování odesílání e-mailů ze systému IS FLORES. Mj. vypíše informace týkající se odesílání e-mailů přes SimpleMAPI rozhraní resp. přes OLE rozhraní Outlooku. Viz též help.
Logování funkcí digitálního zabezpečení - podepisování a kryptování.
Logování rychlého vyhledávání v IS FLORES.
Logování přihlašování do IS FLORES.
Logování v číselnících.
Logování tiskáren.
Tyto třídy byly zrušeny. Namísto nich vznikla skupina UnusedNumbers.
Třída ExceptionHook loguje výjimky v systémovém háčku. Tento log je schopný zaznamenat veškeré výjimky za běhu programu, pokud takové v systému nastanou (využití např. pro logování automatizačního serveru), ale i jinde. Při ukončování aplikace jsou události zaznamenávané pouze po dobu existence instance logovací třídy.
ExcludedExceptionClasses
V aplikacích se používá mnoho tříd výjimek, např. Exception, NxError, EAbort atd. Logování všeho činí složitějším vyhledávání informací, proto je možné zadat filtr, které třídy nás nezajímají. Více tříd je nutné oddělit středníkem.
Výchozí hodnota je EAbort;NxHiddenError;EIdSocketError;EIdConnectTimeout;EIdNotASocket.
ExcludedNxErrorCodes
Výchozí hodnota parametru ExcludedNxErrorCodes je 1511 (neexistující položka business objektu). Tzn. není-li parametr ExcludedNxErrorCodes nastaven, neloguje se výskyt výjimky 1511 a ostatní výjimky se logují.
Při následujícím nastavení se logují všechny výjimky kromě 1511:
[Log.ExceptionHook]
Enabled=1
Chcete-li zapnout logování výjimky 1511, musíte v Nexus.CFG uvést následující:
[Log.ExceptionHook]
Enabled=1
ExcludedNxErrorCodes=
CallStack
Příznak, zda doplnit ke každé výjimce CallStack.
Výchozí hodnota je 1.
WithConvertions
Příznak, zda zaznamenávat do logů i konverze výjimek.
Výchozí hodnota je 0.
Třída ModalWindows zapisuje do logu informace o modálních oknech. Takové okno vyžaduje interaktivní zásah obsluhy. Aktivací logu se může osvětlit, proč dojde k "zaseknutí" procesů, které nesmí být interaktivní, např. webové služby, automatizační server atd.
Třída Scripting je zveřejněna do skriptování a umožňuje provádět interní logování přímo ze skriptování. Pro zápis informací do logu ze skriptů je určena třída TNxScriptingLog a její metody, především metoda WriteEvent, viz též logování ze skriptování.
Skupina zaznamenávající informace o běhu automatizačního serveru. Aby bylo možné rozumně logovat dění v automatizačním serveru, používají se pro jeho části své logy. Logů není málo, proto pro jsme pro zjednodušení konfigurace logování zavedli skupinu. Není třeba se obávat zpomalení automatizačního serveru.
Pozor, při logování automatizačního serveru v čase vzniká množství souborů, které je potřeba rozumně odsouvat.
Skupina by měla být vždy aktivovaná.
Zaznamenávání synchronizačních objektů automatizačního serveru. Automatizační server je vícevláknová aplikace, která používá synchronizační objekty jádra windows. Skupina poskytuje doplňkové informace ke skupině AS~GROUP. Informace jsou čistě ladícího charakteru.
Skupinu aktivovat pouze na žádost vývoje, jinak zbytečně zahlcuje logy. Nemá smysl skupinu aktivovat bez skupiny AS~GROUP.
Jednotlivé typy úloh automatizačního serveru logují informace. Tříd v této skupině je opět mnoho, co typ úlohy, to logovací třída.
Třídu je doporučeno aktivovat v okamžiku, kdy je potřeba sledovat, co se v úlohách děje. Nemá smysl skupinu aktivovat bez skupiny AS~GROUP.
Třída zapisuje do logu informace o průběhu předkontování účetních zápisů. Loguje pomocí zpráv typu 4 (Notice, "běžná hlášení") a případné chyby během vyhodnocení výrazu předkontací pomocí typu 2 (Error, "chyby"). Třídu je doporučeno aktivovat v okamžiku, kdy je potřeba sledovat, co se přesně děje v okamžiku předkontovávání, pokud se účetní zápisy nepředkontovaly dle očekávání, ale není zřejmé proč.
Třída zapisuje do logu informace o všech chybných SQL dotazech.
Třída zapisuje do logu informace o chybných HTTP komunikacích.
Např. při blokování odchozích připojení z panelu Aktuální informace z okna pro spouštění agend může zápis v logu vypadat následovně:
Exception: EIdSocketError Socket Error # 10013. Access denied.
Skupina umožňuje logovat činnost OLE klienta. Pro všechny třídy v OLE jsou zavedeny samostatné logy, které jsou součástí skupiny
[Log.Flores OLE]
Enabled=1
Level=6
Umožňuje logovat vyvolání online nápovědy.
[Log.Flores Help]
Enabled=1
Level=6
K logování instalace:
-
logování instalace update:
Instalace nemá žádné své speciální volání logování, takže se loguje všeobecným zapnutím logování bez specifikace.
Příklad zápisu do sekce logování v nexus.cfg:
[Logs]
Enabled=1
Level=6
LogsDirectory={DIR}Výsledný log bude např.: 17-02-02 17-51-58-055 Setup2 1820 COMPILER.MICE-NTB2 ABRAGen.log
Takto zapnuté logování znamená, že se pak bude logovat i vlastní IS FLORES. Pokud to nechcete a zajímala vás jen instalace, pak po provedení instalace je třeba příkaz pro logování v nexus.cfg zapoznámkovat nebo jej odstranit.
Kromě výše uvedeného instalační proces dále loguje výsledky kontrol prováděných během instalace update (kontroly databáze za každé spojení apod.). Toto se děje vždy, není třeba nijak zapínat. Výsledný log je soubor s názvem tvořeným dle instalované verze, data atd. Např. installlog_170103_17-02-02 16-29-02-013.txt a je uložen v rootu instalace IS FLORES.
-
logování nové instalace:
U nové instalace nelze logování řešit zapnutím logování v nexus.cfg (jelikož tento zatím neexistuje). Řeší se spuštěním instalačního programu s parametrem. Viz parametry instalačního programu - parametr -log-new-installation.
Skupina umožňuje logovat Nepoužitá čísla dokladů.
[Log.UnusedNumbers]
Enabled=1
Level=6
Logování činností spojených s funkcionalitou ochrany dat. Skupinu tvoří několik tříd, které je možné konfigurovat samostatně (zejména zapínat/vypínat logování a nastavovat úroveň podrobnosti) nebo zapnout logování pro všechny třídy ze skupiny najednou.
Nastavením podle níže uvedeného příkladu by se zahájilo logování na maximální úrovni podrobnosti pro veškerou funkcionalitu spojenou s ochranou dat (z důvodu vytížení systému nedoporučujeme).
[Log.DataProtection~Group]
Enabled=1
Level=6
V současné spadají do této skupiny čtyři logovací třídy, logování činností příslušných komponent možné nastavovat ve čtyřech odpovídajících sekcích NEXUS.CFG:
[Log.DataProtection]- Loguje aktivity spojené s používáním tříd TNxCompanyCache.TDataProtectionCache a TNxDataProtection - vstupy/výstupy do/z důležitých metod.[Log.DataProtectionUpdater]- Loguje aktivity spojené s generováním povolení ke zpracování dat - log obsahuje identifikaci povolení, zdrojového záznamu (ze kterého se povolení generuje), subjektu (např. osoby nebo firmy), pravidla, definice.[Log.DataProtectionFindOwnerInDB]- Loguje aktivity spojené s dohledáváním vlastníka (dotazem do databáze).[Log.GDPRDriver]- Loguje aktivity spojené s používáním třídy TNxGDPRDriver (činnost ovladače ochrany dat).