Ik ben redelijk nieuw met Flex en ActionScript en meteen lig ik al overhoop met het logsysteem. Ik ben namelijk bezig met het maken van een component, dat ik vervolgens mbv MXML toevoeg aan een applicatie. Het compoment zelf schrijf ik in ActionScript en vanaf daar wil ik kunnen loggen zodat het elders in de applicatie kan worden afgehandeld. Mijn probleem is echter dat deze log events niet aan lijken te komen bij het LogTarget.
Dit is het beste te illustreren met een voorbeeld. Op http://micheljansen.org/workspace/LogTest/src.zip is een heel simpel project te downloaden
• een MXML application met twee componenten: een logpanel en een loggende button
• een custom DebugTarget die naar het logpanel schrijft
• een DebugButton die logt als hij wordt gemaakt en als er op wordt geklikt
DebugButton:
Zie het resultaat hier: http://micheljansen.org/w...st/LogTestApplication.swf
Het vreemde is nu dus, dat de logevents die worden gegenereerd in het <mx:script> block en in het click attribuut van de DebugButton wel werken, maar die binnen de DebugTarget class niet.
Wat doe ik verkeerd
Dit is het beste te illustreren met een voorbeeld. Op http://micheljansen.org/workspace/LogTest/src.zip is een heel simpel project te downloaden
• een MXML application met twee componenten: een logpanel en een loggende button
• een custom DebugTarget die naar het logpanel schrijft
• een DebugButton die logt als hij wordt gemaakt en als er op wordt geklikt
DebugButton:
Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| package org.micheljansen.util { import mx.logging.*; import mx.core.*; import mx.controls.*; public class DebugButton extends Button { public function DebugButton() { super(); Log.getLogger("debug").debug("DebugButton constructed"); } override public function initialize():void { super.initialize(); this.label="DebugButton"; Log.getLogger("debug").debug("DebugButton initialized"); } } } |
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:util="org.micheljansen.util.*" backgroundColor="#FFFFFF" backgroundImage="null" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" creationComplete="initLogging();"> <mx:Script> <![CDATA[ import mx.logging.targets.*; import mx.logging.*; import org.micheljansen.util.*; import mx.controls.Alert; private function initLogging():void { var logTarget:TraceTarget = new TraceTarget(); logTarget.level = LogEventLevel.ALL; Log.addTarget(logTarget); var debugTarget:DebugTarget = new DebugTarget(logPanel); Log.addTarget(debugTarget); Log.getLogger("debug").debug("logging initialised"); //new DebugButton(); } ]]> </mx:Script> <util:DebugButton click="Log.getLogger('debug').debug('clickety');"/> <mx:Panel id="logPanel" title="Log" /> </mx:Application> |
Zie het resultaat hier: http://micheljansen.org/w...st/LogTestApplication.swf
Het vreemde is nu dus, dat de logevents die worden gegenereerd in het <mx:script> block en in het click attribuut van de DebugButton wel werken, maar die binnen de DebugTarget class niet.
Wat doe ik verkeerd
micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©