Header Image

Translate

zondag 21 juni 2015

Log de infolog

Het komt geregeld voor dat gebruikers fouten krijgen. Soms duidelijk, soms niet. Soms meld de gebruiker de melding, maar soms ook niet. Voorbeeld:
image
Log de infolog:
image
Het bevat niet de formuliernamen in deze stack, maar wel dat het vanaf een formulier is. Als het via de formletter classes gaat, geeft het al meer inzicht wat de gebruiker aan het doen was. Dit werkt ook in de Ax 4.0 portal: fouten die op de portal gebeuren in de business connector komen ook terug als je de filter goed instelt.

Download

De oplossing voor Ax 2009 (werkt ook voor Ax 4.0), te downloaden hier: INT20150622_AX2009_MessageLog

Inrichting

Na import heb je onder administratie\instellen\Bericht filter/log. Dit opent het scherm:
image
Velden:
Message criteria: Filter met wildcards. ‘*conflict*’ logt alle berichten met het woord conflict erin. ‘*’ gewoon alles
Filter until date: Filter tot datum. Dit is een bewuste implementatie keuze. Het komt tevaak voor dat database logs worden aangezet en dan vergeten. Om te voorkomen dat het systeem zich volvreet met onnodige logging, vul deze datum realistisch.
Filter user: Als je een specifieke gebruiker wil loggen. Leeg = alle
Filter loglevel: De type melding die je wilt loggen. Info, warning error zijn gangbare. Let wel: omdat info een enumwaarde 0 heeft, moet je wel ‘filter loglevel active’ aan hebben staan.
Filter loglevel active: Indien aan, logt het systeem alleen meldingen die voldoen aan je filter loglevel
Created/modified: kan je zien wie de log heeft aangemaakt en gewijzigd.
Voorbeelden:
image
1 – Log alle fouten van iedereen
2 - Log alle warnings van de admin user
3 – Log alle meldingen (info, warning & error) waar de woorden ‘update’ en ‘conflict’ in die volgorde in de tekst staan.

Inhoudelijk

In standaard Ax lopen alle meldingen naar de infolog via dezelfde methode: infoLog.add(…). Daar zit dan ook de enige aanpassing in standaard Ax (naast het menu zelf):
1 Exception add(  2 Exception _exception,  3 str _txt,  4 str _helpUrl = '',  5 SysInfoAction _sysInfoAction = null,   6 boolean buildprefix = true)   7 {   8 // SysInfologLevel infologLevel = this.infologLevel(); 9 int numOfLines,i;  10 int actionClassId; 11 container packedAction; 12 xSession session;  13 ; 14 INTProgramLog::logInfoMessage(_txt, _exception); // INT Ghull - message log 15 switch (logLevel)  16 {  17 case SysInfologLevel::None:  18 return _exception;  19 case SysInfologLevel::Warning:  20 if (_exception == Exception::Info)  21 return _exception;  22 break; 23 case SysInfologLevel::Error:  24 if (_exception == Exception::Info || _exception == Exception::Warning)  25 return _exception;  26 } 27 ....
De security keys zijn gelijk getrokken aan de admin module. Het is net als de database log een tool voor beheerder en consultants om hun werk makkelijker te maken.

image

Let op bij de import. Een aanpassing zoals hier in de info class kan gevaarlijk zijn als deze in een niet-compileerbare staat wordt achtergelaten.

Volgende keer als een gebruiker dus komt: ik krijg een melding zonder de melding nog te weten of dat het sporadisch voorkomt, zet de log aan. Het geeft op zijn minst inzicht in de locatie binnen het programma. Vandaar ook de benaming ‘INTProgramLog’.

Gerrit Hulleman

Geen opmerkingen:

Een reactie posten