]> source.dussan.org Git - aspectj.git/commitdiff
Bug 159854 "Problem Diagnosis Guide" (first draft)
authormwebster <mwebster>
Mon, 30 Oct 2006 16:34:42 +0000 (16:34 +0000)
committermwebster <mwebster>
Mon, 30 Oct 2006 16:34:42 +0000 (16:34 +0000)
docs/devGuideDB/ltw.xml
docs/dist/doc/index.html
docs/pdGuideDB/ajcore.xml
docs/pdGuideDB/ltwdump.xml
docs/pdGuideDB/messages.xml
docs/pdGuideDB/pdguide.xml
docs/pdGuideDB/trace.xml

index dedfdb2e71d52edd4dd2833d159c5a85f22666b6..39d584233c09d9c20f925d8f9a79d0229cd7bb71 100644 (file)
                                    bootstrapped are accumulated until all options are parsed. If the messages are required to be output
                                    immediately you can use the option <literal>-Daj.weaving.verbose=true</literal> on the JVM startup command line.
                             </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>-debug</literal>
+                            </entry>
+                            <entry>
+                               Issue a messages for each class passed to the weaver 
+                               indicating whether it was woven, excluded or ignored. 
+                               Also issue messages for classes
+                               defined during the weaving process such as around advice
+                               closures and concrete aspects defined in 
+                               <literal>META-INF/aop.xml</literal>.
+                            </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>-showWeaveInfo</literal>
+                            </entry>
+                            <entry>
+                               Issue informational messages whenever the weaver touches a class file.
+                               This option may also be enabled using the System property
+                               <literal>-Dorg.aspectj.weaver.showWeaveInfo=true</literal>.
+                            </entry>
                         </row>
                                        <!-- TODO option parsed but not used -->
                                        <!--
                             </entry>
                             <entry>Don't inline around advice.</entry>
                         </row>
-                        <row>
-                            <entry>
-                                <literal>-showWeaveInfo</literal>
-                            </entry>
-                            <entry>Issue informational messages whenever the weaver touches a class file</entry>
-                        </row>
                         <row>
                             <entry>
                                 <literal>-XmessageHandlerClass:...</literal>
index 050e93c702d19a21ee3c01d957a63172c7371b1d..93cce181aea7341390ff3e2112579212c9f464bf 100644 (file)
          
          (printable <a href="devguide/printable.html">html</a>)
      </td>
-     <td>This has a guide to  
+     <td>This is a guide to  
      <a href="devguide/ajc-ref.html">ajc</a>, the command-line compiler;
      <a href="devguide/ajbrowser.html">ajbrowser</a>, the stand-alone
      GUI for compiling and viewing crosscutting structure; 
index d600cb029580e68ffa0a2d820739f19cd02461f7..8877f43540bbb74a0c3644d022738d06ad7e93d5 100644 (file)
         
         <para> When the compiler terminates abnormally, either because a particular kind of message was
         issued or an exception was thrown, an AspectJ core file will be produced. You will
-        find it the working directory of the compiler and will have a name that contains
+        find it the working directory of the compiler and it will have a name that contains
         the date and time that the file was produced 
-        e.g. <literal>ajcore.20060810.173655.626.txt</literal>. </para>
+        e.g. <literal>ajcore.20060810.173655.626.txt</literal>. The file contains details
+        of the problem such as the exception thrown as well as information about the
+        environement such as operating system and Java version. </para>
         
         <para> </para>
+    
+        <sect2 id="configuration" xreflabel="configuration">
+            <title>Configuration</title>
+            
+            <para> By default AspectJ will only create an <literal>ajcore</literal> file 
+            when an unexpected exception is thrown by the weaver or an 
+            <literal>abort</literal> message is
+            issued. However it is possible to disble this feature or enable files to
+            be produced under different circumstances. The table below lists the System 
+            properties that can be used to configure <literal>ajcore</literal> files. </para>
+            <informaltable>
+                <tgroup cols="3">
+                    <thead>
+                        <row>
+                            <entry>Property</entry>
+                            <entry>Default</entry>
+                            <entry>Description</entry>
+                        </row>
+                    </thead>
+                    <tbody>
+                        <row>
+                            <entry>
+                                <literal>org.aspectj.weaver.Dump.exception</literal>
+                            </entry>
+                            <entry>
+                                <literal>true</literal>
+                            </entry>
+                            <entry>
+                               Generate an <literal>ajcore</literal> files when an exception thrown.
+                            </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>org.aspectj.weaver.Dump.condition</literal>
+                            </entry>
+                            <entry>
+                                <literal>abort</literal>
+                            </entry>
+                            <entry>
+                               Message kind for which to generate <literal>ajcore</literal>
+                               e.g. <literal>error</literal>. 
+                            </entry>
+                        </row>
+                    </tbody>
+                </tgroup>
+            </informaltable>
+               </sect2>
+
+        <sect2 id="examples" xreflabel="examples">
+            <title>Examples</title>
+        
+            <para> Below is an extract from an <literal>ajcore</literal> file. You will see
+            details of the dump configuration as well as the exception (with stack trace) that
+            is the source of the problem and any messages issued by the compiler. Most importantly
+            the exact version of AspectJ is included. </para>
+               <programlisting><![CDATA[
+---- AspectJ Properties ---
+AspectJ Compiler DEVELOPMENT built on Tuesday Jul 25, 2006 at 13:00:09 GMT
+---- Dump Properties ---
+Dump file: ajcore.20060810.173655.626.txt
+Dump reason: java.lang.NoClassDefFoundError
+Dump on exception: true
+Dump at exit condition: abort
+---- Exception Information ---
+java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
+       at org.aspectj.weaver.tools.CommonsTraceFactory.<init>(CommonsTraceFactory.java:17)
+       at java.lang.Class.newInstance0(Native Method)
+       at java.lang.Class.newInstance(Class.java:232)
+       at org.aspectj.weaver.tools.TraceFactory.<clinit>(TraceFactory.java:35)
+       at org.aspectj.weaver.World.<clinit>(World.java:114)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:679)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:224)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:164)
+       at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
+       at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
+       at org.aspectj.tools.ajc.Main.run(Main.java:367)
+       at org.aspectj.tools.ajc.Main.runMain(Main.java:246)
+       at org.aspectj.tools.ajc.Main.main(Main.java:86)
+---- System Properties ---
+java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
+sun.boot.library.path=C:\jdk1.3.1_16\jre\bin
+java.vm.version=1.3.1_16-b06
+java.vm.vendor=Sun Microsystems Inc.
+java.vendor.url=http://java.sun.com/
+path.separator=;
+java.vm.name=Java HotSpot(TM) Client VM
+file.encoding.pkg=sun.io
+java.vm.specification.name=Java Virtual Machine Specification
+user.dir=C:\workspaces\org.aspectj\org.aspectj.ant.tests
+java.runtime.version=1.3.1_16-b06
+java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
+os.arch=x86
+java.io.tmpdir=C:\DOCUME~1\IBM_user\LOCALS~1\Temp\
+line.separator=
+
+java.vm.specification.vendor=Sun Microsystems Inc.
+java.awt.fonts=
+os.name=Windows XP
+java.library.path=C:\jdk1.3.1_16\jre\bin;...
+java.specification.name=Java Platform API Specification
+java.class.version=47.0
+os.version=5.1
+user.home=C:\Documents and Settings\IBM_user
+user.timezone=Europe/London
+java.awt.printerjob=sun.awt.windows.WPrinterJob
+file.encoding=Cp1252
+java.specification.version=1.3
+java.class.path=C:\workspaces\org.aspectj\aj-build\dist\tools\lib\aspectjtools.jar
+user.name=IBM_user
+java.vm.specification.version=1.0
+java.home=C:\jdk1.3.1_16\jre
+user.language=en
+java.specification.vendor=Sun Microsystems Inc.
+awt.toolkit=sun.awt.windows.WToolkit
+java.vm.info=mixed mode
+java.version=1.3.1_16
+java.ext.dirs=C:\jdk1.3.1_16\jre\lib\ext
+sun.boot.class.path=C:\jdk1.3.1_16\jre\lib\rt.jar;...
+java.vendor=Sun Microsystems Inc.
+file.separator=\
+java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
+sun.io.unicode.encoding=UnicodeLittle
+sun.cpu.endian=little
+user.region=GB
+sun.cpu.isalist=pentium i486 i386
+---- Command Line ---
+-d
+C:\workspaces\org.aspectj\org.aspectj.ant.tests\IncrementalAjcTaskTest-temp
+-g:none
+-deprecation
+-noExit
+-warn:-unusedImport
+-nowarn
+-XterminateAfterCompilation
+-preserveAllLocals
+-proceedOnError
+-referenceInfo
+-source
+1.3
+-target
+1.1
+-time
+-verbose
+-classpath
+C:\workspaces\org.aspectj\org.aspectj.ant.tests\..\lib\test\aspectjrt.jar
+-argfile
+C:\workspaces\org.aspectj\taskdefs\testdata\default.lst
+-messageHolder
+org.aspectj.bridge.MessageHandler
+---- Full Classpath ---
+Empty
+---- Compiler Messages ---
+abort ABORT -- (NoClassDefFoundError) org/apache/commons/logging/LogFactory
+org/apache/commons/logging/LogFactory
+java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
+       at org.aspectj.weaver.tools.CommonsTraceFactory.<init>(CommonsTraceFactory.java:17)
+       at java.lang.Class.newInstance0(Native Method)
+       at java.lang.Class.newInstance(Class.java:232)
+       at org.aspectj.weaver.tools.TraceFactory.<clinit>(TraceFactory.java:35)
+       at org.aspectj.weaver.World.<clinit>(World.java:114)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.initBcelWorld(AjBuildManager.java:679)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:224)
+       at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:164)
+       at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
+       at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
+       at org.aspectj.tools.ajc.Main.run(Main.java:367)
+       at org.aspectj.tools.ajc.Main.runMain(Main.java:246)
+       at org.aspectj.tools.ajc.Main.main(Main.java:86)
+                       ]]></programlisting>
+            
+        </sect2>
     </sect1>
 </chapter>
index 99240965a0540bc846995f8fdb87e0d1ee7ff224..36b1bea3aa3e12b3e2faca86e1a40db68977f2b5 100644 (file)
@@ -4,8 +4,71 @@
     <sect1 id="ltwdump-introduction">
         <title>Introduction</title>
         
-        <para> Occasionally problems may be encountered with classes that have been load-time woven. Symptoms will
-        include incorrect program function or a Java exception such as 
-        <literal>java.lang.VerifyError</literal>.</para>
+        <para> Occasionally problems may be encountered with classes that have been load-time woven. 
+        Symptoms will include incorrect program function or a Java exception such as 
+        <literal>java.lang.VerifyError</literal>. Problems can be caused by the way 
+        an aspect or class is built, incompatibilities between AspectJ and 
+        generated byte-code 
+        e.g. <ulink url="https://bugs.eclipse.org/bugs/show_bug.cgi?id=117854">CGLIB</ulink>
+        or a bug in the weaver.
+        When these problems occur it may be necessary to attach the class files concerned
+        to a bug report. AspectJ can be configured to dump byte-code to disk using
+        <literal>META-INF/aop.xml</literal>. The <literal>_ajdump</literal> subdirectory the the current
+        working directory is used. </para>
+    
+        <sect2 id="configuration" xreflabel="configuration">
+            <title>Configuration</title>
+            
+            <para> See the 
+                               <ulink url="../devguide/ltw-configuration.html#configuring-load-time-weaving-with-aopxml-files">
+                               Development Environment Guide</ulink>
+                               for details of how to configure byte-code dumping. </para>
+               </sect2>
+
+        <sect2 id="examples" xreflabel="examples">
+            <title>Examples</title>
+        
+            <para> By default AspectJ will dump byte-code only after it is woven. This 
+            is because usually the original class file is already available. However 
+            byte-code is sometimes generated by frameworks or downloaded over the network
+            in which case AsepctJ can dump the byte-code before it is woven too. </para>
+            
+            <para> The following <literal>META-INF/aop.xml</literal> will 
+            weave classes in the <literal>com.foo</literal> package (and subpackages) but not
+            CGLIB generated classes in the <literal>com.foo.bar</literal> package (and subpackages). 
+            It will also ensure all
+            woven byte-code is dumped both before and after weaving. </para>
+               <programlisting><![CDATA[
+       <aspectj>
+               <aspects>
+                       <aspect name="ataspectj.EmptyAspect"/>
+               </aspects>
+           <weaver options="-verbose -debug">
+               <dump within="com.foo.bar..*" beforeandafter="true"/> 
+           <include within="com.foo..*"/>
+               <exclude within="com.foo.bar..*CGLIB*"/>
+               </weaver>
+       </aspectj>
+                       ]]></programlisting>
+            
+            <para> You should see messages similar to this: </para>
+
+               <programlisting><![CDATA[
+[WeavingURLClassLoader] info AspectJ Weaver Version 1.5.3 built on Thursday Oct 26, 2006 at 17:22:31 GMT
+[WeavingURLClassLoader] info register classloader org.aspectj.weaver.loadtime.WeavingURLClassLoader
+[WeavingURLClassLoader] info using configuration /C:/tempMETA-INF/aop.xml
+[WeavingURLClassLoader] info register aspect ataspectj.EmptyAspect
+[WeavingURLClassLoader] debug not weaving 'com.foo.bar.Test$$EnhancerByCGLIB$$12345'
+[WeavingURLClassLoader] debug weaving 'com.foo.bar.Test'
+                       ]]></programlisting>
+            
+            <para> On disk you would find the following files: </para>
+
+               <programlisting><![CDATA[
+       _ajdump/_before/com/foo/bar/Test.class
+       _ajdump/com/foo/bar/Test.class
+                       ]]></programlisting>
+            
+        </sect2>
     </sect1>
 </chapter>
index d7fcf3ef7d175d4491a956fd191a9d4ced0ecb95..0dae391cda01d8ce841a9f9c9d62a435c092d162 100644 (file)
         
         <para> By default only warning and error messages are issued by the compiler whether it is
         being used for source code compilation, weaving, binary weaving or load-time weaving. Informational,
-        debug and weaving messages can also be obtained using compiler options or System properties. </para>
+        debug and weaving messages can also be obtained using compiler options 
+        or System properties. Also as well as being able to soften or ignore 
+        certain error messages the various <literal>-Xlint</literal> 
+        <ulink url="../devguide/ajc-ref.html">options</ulink> can be used to 
+        notify you of conditions that would otherwise be ignored. </para>
+
+               <para> It is often difficult to determine, especially when using load-time weaving (LTW),
+               why advice has not been woven. Here is a quick guide to the messages to
+               look for. Firstly if you use the <literal>-verbose</literal> option you 
+               should see the following message when your aspect is registered: </para>
+
+        <programlisting><![CDATA[
+       info register aspect MyAspect
+        ]]></programlisting>
+
+               <para> Secondly if you use the <literal>-debug</literal> option you should 
+               see a message indicating that you class is being woven: </para>
+
+        <programlisting><![CDATA[
+       debug weaving 'HelloWorld'
+        ]]></programlisting>
+
+               <para> However this does not mean that advice has actually been woven into
+               your class merely that the class has been passed to the weaver. So thirdly to determine
+               whether your pointcuts match you can use the <literal>-showWeaveInfo</literal>
+               option which will cause a message to be issued each time a piece of advice is woven: </para>
+
+        <programlisting><![CDATA[
+       weaveinfo Join point 'method-execution(void HelloWorld.main(java.lang.String[]))' ...
+               ]]></programlisting>
 
         <sect2 id="configuration" xreflabel="configuration">
             <title>Configuration</title>
+            
+            <para> The table below lists the options used to control AspectJ messages. The method
+            of configuration depends on your environment so refer to the relevant 
+            documentation for 
+            <ulink url="../devguide/ajc-ref.html">ajc</ulink>, 
+            <ulink url="../devguide/antTasks-iajc.html#antTasks-iajc-options">Ant</ulink> or 
+            <ulink url="../devguide/ltw-configuration.html#weaver-options">LTW</ulink>. </para>
+            <informaltable>
+                <tgroup cols="2">
+                    <thead>
+                        <row>
+                            <entry>Option</entry>
+                            <entry>Description</entry>
+                        </row>
+                    </thead>
+                    <tbody>
+                        <row>
+                            <entry>
+                                <literal>-verbose</literal>
+                            </entry>
+                            <entry>
+                               Show informational messages including AspectJ version
+                               and build date.
+                            </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>-debug</literal>
+                            </entry>
+                            <entry>
+                               (Load-time weaving only). Show debugging messages such as
+                               which classes are being woven or those that are excluded.
+                            </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>-showWeaveInfo</literal>
+                            </entry>
+                            <entry>
+                               Show weaving messages.
+                            </entry>
+                        </row>
+                        <row>
+                            <entry>
+                                <literal>-Xlint</literal>
+                            </entry>
+                            <entry>
+                               Control level of lint messages.
+                            </entry>
+                        </row>
+                    </tbody>
+                </tgroup>
+            </informaltable>
+            
+            <para> The table below lists some useful <literal>-Xlint</literal> messages. </para>
+            <informaltable>
+                <tgroup cols="3">
+                    <thead>
+                        <row>
+                            <entry>Message</entry>
+                            <entry>Default</entry>
+                            <entry>Description</entry>
+                        </row>
+                    </thead>
+                    <tbody>
+                        <row>
+                            <entry>
+                                <literal>aspectExcludedByConfiguration</literal>
+                            </entry>
+                            <entry>
+                                <literal>ignore</literal>
+                            </entry>
+                            <entry>
+                               If an aspect is not being woven, despite being
+                               registered, it could be that it has been excluded
+                               by either an <literal>include</literal> or <literal>exclude</literal> 
+                               element in the 
+                               <literal>aspects</literal> section of <literal>META-INF/aop.xml</literal>.
+                               Enable this message to determine whether an aspect has
+                               been excluded.
+                            </entry>
+                        </row>
+                    </tbody>
+                </tgroup>
+            </informaltable>
         
             <para>  </para>
         </sect2>
         <sect2 id="examples" xreflabel="examples">
             <title>Examples</title>
         
-            <para>  </para>
+            <para> You can use <literal>META-INF/aop.xml</literal> to control which
+            messages are produced during LTW. The following example will produce
+            basic informational messages about the lifecyle of the weaver in
+            addition to any warning or error messages. </para>
+
+               <programlisting><![CDATA[
+       <aspectj>
+               <weaver options="-verbose">
+               </weaver>
+       </aspectj>
+                       ]]></programlisting>
+        
+            <para> Notice that you are told exactly which <literal>META-INF/aop.xml</literal> 
+            configurations file(s) are being used. Each message is also preceeded by the 
+            name of the defining class loader associated with weaver. You can use this
+            information in a large system to distinguish between different applications each
+            of which will typically have its own class loader. </para>
+
+               <programlisting><![CDATA[
+[AppClassLoader@92e78c] info AspectJ Weaver Version 1.5.3 built on Thursday Oct 26, 2006 at 17:22:31 GMT
+[AppClassLoader@92e78c] info register classloader sun.misc.Launcher$AppClassLoader@92e78c
+[AppClassLoader@92e78c] info using configuration /C:/temp/META-INF/aop.xml
+[AppClassLoader@92e78c] info using configuration /C:/temp/META-INF/aop-ajc.xml
+[AppClassLoader@92e78c] info register aspect ExceptionHandler
+[AppClassLoader@92e78c] info processing reweavable type ExceptionHandler: ExceptionHandler.aj
+                       ]]></programlisting>
         </sect2>
     </sect1>
 </chapter>
index 2090cb6cbd630cabd68150dc29c3a5da2ad7a04d..8b79e6573182878bed44c49416772cc45b6af8c0 100644 (file)
@@ -30,7 +30,9 @@
       <para>
         This guide describes how to gather and interpret information from the AspectJ compiler
         to when diagnsoing problems in AspectJ programs, configuring the load-time weaving
-        framework or reporting bugs on Bugzilla.
+        framework or reporting bugs on Bugzilla. Some information e.g. messages is intended to
+        help you solve coding or configuration problems. Other information is intended to be
+        be used by the AspectJ team when trying to fix bugs.
       </para>
     </abstract>
   </bookinfo>
index 85d51e97ab2e6e602d7d86d778942cb2606de182..382d878423d21ed3f4da6e8ceadb23cf0c6df6ab 100644 (file)
@@ -7,9 +7,9 @@
         <para> The usual approach to opening a report on Bugzilla is to describe the symptoms of the 
         problem and attach a simple testcase. This allows the AspectJ team to try and reproduce the problem in
         an attempt to fix it as well as improve the test suite. Unfortunately it may not be possible
-        to produce such a testcase either because your program is too large or is comercially sensitive. Alternatively 
+        to produce such a testcase either because your program is too large or is commercially sensitive. Alternatively 
         the problem may relate to your specific environment where AspectJ is being used and will not be
-        reproducible by the AspectJ team. In one of these situations you may be asked to produce a
+        reproducible by the AspectJ team. In each of these situations you may be asked to produce a
         trace of the compiler when the problem occurs instead. This can then be attached to the bug report. </para>
 
         <sect2 id="configuration" xreflabel="configuration">
@@ -21,7 +21,7 @@
             that is configured using a logging.properties file. By default only error
             and fatal events will be logged but less severe warnings as well as fine grained
             method entry and exit events can be obtained using the appropriate configuration. All
-            compiler messages can also be logged through the infrastructure by setting the
+            regular compiler messages can also be logged through the infrastructure by setting the
             <literal>org.aspectj.weaving.messages</literal> System property. </para>
             
             <para> If you are using a JDK 1.4 or earlier AspectJ will use a simple built-in trace
         <sect2 id="examples" xreflabel="examples">
             <title>Examples</title>
         
-            <para>  </para>
+            <para> Using <literal>-Dorg.aspectj.tracing.factory=default</literal>
+               to force AspectJ to use its internal infrastructure,
+               <literal>-Dorg.aspectj.tracing.enabled=true</literal> to turn it on and  
+               <literal>-Dorg.aspectj.tracing.messages=true</literal> to include messages
+               running a simple HelloWorld with LTW will generate tracing to stderr. Below
+               is an extract from that trace with method arguments removed. 
+               You will notice the millisecond time stamp,
+               thread id and indication of entry/exit/event or message type for each line
+               of trace.
+            </para>
+               <programlisting><![CDATA[
+15:44:18.630 main > org.aspectj.weaver.loadtime.Aj.<init> 
+15:44:18.660 main < org.aspectj.weaver.loadtime.Aj.<init>
+15:44:18.660 main > org.aspectj.weaver.loadtime.Aj.preProcess
+15:44:18.660 main - org.aspectj.weaver.loadtime.Aj.preProcess
+15:44:18.730 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>
+15:44:18.730 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>
+15:44:18.730 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize 
+15:44:18.821 main I [AppClassLoader@92e78c] info AspectJ Weaver Version DEVELOPMENT ...
+15:44:18.821 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions
+15:44:18.821 main I [AppClassLoader@92e78c] info register classloader ...
+15:44:18.821 main - org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions 
+15:44:18.841 main - org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions 
+15:44:18.841 main I [AppClassLoader@92e78c] info using configuration ...
+15:44:18.891 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.parseDefinitions 
+15:44:19.021 main > org.aspectj.weaver.World$TypeMap.<init>
+15:44:19.021 main < org.aspectj.weaver.World$TypeMap.<init>
+15:44:19.021 main > org.aspectj.weaver.CrosscuttingMembersSet.<init>
+15:44:19.021 main < org.aspectj.weaver.CrosscuttingMembersSet.<init>
+15:44:19.021 main > org.aspectj.weaver.Lint.<init>
+15:44:19.021 main < org.aspectj.weaver.Lint.<init>
+15:44:19.021 main > org.aspectj.weaver.World.<init> 
+15:44:19.111 main < org.aspectj.weaver.World.<init>
+15:44:19.201 main > org.aspectj.weaver.bcel.BcelWeaver.<init> 
+15:44:19.201 main < org.aspectj.weaver.bcel.BcelWeaver.<init>
+15:44:19.201 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions 
+15:44:19.211 main > org.aspectj.weaver.bcel.BcelWeaver.setReweavableMode 
+15:44:19.351 main < org.aspectj.weaver.bcel.BcelWeaver.setReweavableMode
+15:44:19.351 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects 
+15:44:19.351 main I [AppClassLoader@92e78c] info register aspect Aspect
+15:44:19.351 main > org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect 
+15:44:19.501 main - org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass 
+15:44:19.632 main > org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect 
+15:44:19.792 main < org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect 
+15:44:19.792 main < org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect 
+15:44:19.792 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects 
+15:44:19.792 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions 
+15:44:19.792 main > org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave 
+15:44:19.822 main < org.aspectj.weaver.bcel.BcelWeaver.prepareForWeave
+15:44:19.822 main > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.weaveAndDefineConcete...
+15:44:19.822 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.weaveAndDefineConcete...
+15:44:19.822 main < org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize 
+15:44:19.822 main > org.aspectj.weaver.tools.WeavingAdaptor.weaveClass 
+...            
+                       ]]></programlisting>
+        
+            <para> Alternatively when running under Java 5 the <literal>logging.properties</literal>
+               file below could be used to configure Java Logging. The resulting
+               file, just containing trace for the 
+               <literal>org.aspectj.weaver.loadtime</literal> package, will be
+               written to <literal>java0.log</literal> in your <literal>user.home</literal> directory. 
+            </para>
+
+               <programlisting><![CDATA[
+handlers= java.util.logging.FileHandler
+
+.level= INFO
+
+java.util.logging.FileHandler.pattern = %h/java%u.log
+java.util.logging.FileHandler.count = 1
+java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
+java.util.logging.FileHandler.level = FINER
+
+org.aspectj.weaver.loadtime.level = FINER
+                       ]]></programlisting>
+        
+            <para> 
+               By setting the System property <literal>-Dorg.aspectj.tracing.debug=true</literal>
+               you should see a message confirming which trace infrastructure is being used.
+            </para>
+               <programlisting><![CDATA[
+       TraceFactory.instance=org.aspectj.weaver.tools.Jdk14TraceFactory@12dacd1                
+                       ]]></programlisting>
         </sect2>
     </sect1>
 </chapter>