Log de infolog:
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_MessageLogInrichting
Na import heb je onder administratie\instellen\Bericht filter/log. Dit opent het scherm:Velden:
Message criteria: Filter met wildcards. ‘*conflict*’ logt alle berichten met het woord conflict erin. ‘*’ gewoon allesVoorbeelden:
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.
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 ....
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