Browse Source

Bug 159854 "Problem Diagnosis Guide" (first draft)

tags/V1_5_3rc1
mwebster 17 years ago
parent
commit
80f9849bac

+ 23
- 6
docs/devGuideDB/ltw.xml View File

@@ -456,6 +456,29 @@
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 -->
<!--
@@ -507,12 +530,6 @@
</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>

+ 1
- 1
docs/dist/doc/index.html View File

@@ -103,7 +103,7 @@
(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;

+ 175
- 2
docs/pdGuideDB/ajcore.xml View File

@@ -6,10 +6,183 @@
<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>

+ 66
- 3
docs/pdGuideDB/ltwdump.xml View 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>

+ 141
- 2
docs/pdGuideDB/messages.xml View File

@@ -6,10 +6,124 @@
<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>
@@ -17,7 +131,32 @@
<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>

+ 3
- 1
docs/pdGuideDB/pdguide.xml View 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>

+ 86
- 4
docs/pdGuideDB/trace.xml View 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
@@ -89,7 +89,89 @@
<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>

Loading…
Cancel
Save