Konfiguration¶
Jede Aktion innerhalb des Werkzeugs kann über eine Konfigurationsgruppe aktiviert werden. Ist die Gruppe vorhanden, ist die Aktion und deren Knopf sichtbar. Fehlt die Gruppe wird die Aktion nicht angezeigt.
Die Konfiguration des Servers basiert auf unserem Konfigurationssystem. Im einfachsten Fall schreibst du deine Konfiguration in die Datei configuration.xml
welche du im Verzeichnis der Anwendung platzierst. Die genauen Details zum Konfigurationssystem findest du im Kapitel Konfigurationssystem.
Schema der Konfiguration¶
Das folgende Schema zeigt die Struktur der Konfiguration:
Module
Application
Default Value:
You are the best! Thank you for your valuable help!
Default Value:
Yes
Must be an existing file.
Must not be empty.
Default Value:
-l -e
List
Complex list definition
Must not be empty.
Maximum length:
64
Must not be empty.
Must be a valid regular expression.
Must not be empty.
Must be an existing directory.
Must not be empty.
Default Value:
st_{time}_UTC_{application}_{host}_pid_{pid}.txt
Must not be empty.
Maximum length:
120
Default Value:
Please select the reason why you started the stack trace tool:
Must be one of this:
Disabled
,Raw
,AsciiFrame
,AsciiLines
,UnicodeFrame
,UnicodeLines
Default Value:
UnicodeFrame
Must not be empty.
Maximum length:
64
Default Value:
Start JStack Trace
Default Value:
Yes
Must not be empty.
Maximum length:
1000
Default Value:
Please select the affected application:
Die Gruppe jstack
¶
Ist die optionale Gruppe jstack
vorhanden, wird die Aktion „Java Stack Trace Erzeugen“ angezeigt. Lässt du die Gruppe weg, ist die Aktion nicht verfügbar.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="processRegExp">^example.exe$</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
</Group>
Der Wert jstackPath
¶
Mit dem Wert jstackPath
konfigurierst du den absoluten Pfad zu dem jstack.exe
Werkzeug aus dem Java SDK. Wichtig ist dabei, dass du das Werkzeug des selben SDKs wie die zu analysierende Software verwendest.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="processRegExp">^example.exe$</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
</Group>
Der Wert jstackArguments
¶
Mit dem optionalen Wert jstackArguments
gibst du zusätzliche Argumente an, welche beim Aufruf an jstack.exe
übergeben werden. Lässt du diesen Wert weg, wird der Default -l -e
verwendet.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="jstackArguments">-l</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Die Liste applicationList
¶
In der Liste applicationList
definierst du eine oder mehrere Anwendungen für welche ein Stack Trace geschrieben werden soll. Für jede Anwendung wird ein neuer Startknopf im Startfenster erstellt.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="jstackArguments">-l</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First</Value>
<Value name="processRegExp">^(?:app1|app1-helper)\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second</Value>
<Value name="processRegExp">^second-app\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert name
¶
Mit dem Wert name
gibst du der Anwendung einen eindeutigen Namen. Dieser Name wird sowohl in der Ausgabedatei verwendet, im Titel der Fenster und du kannst ihn als Platzhalter für den Dateinamen verwenden.
Wähle hier einen kurzen prägnanten Namen, am besten ohne Leerzeichen. Jeder Eintrag in der Liste muss einen eindeutigen Namen haben.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="jstackArguments">-l</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First</Value>
<Value name="processRegExp">^(?:app1|app1-helper)\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second</Value>
<Value name="processRegExp">^second-app\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert taskTitle
¶
Mit dem optionalen Wert taskTitle
änderst du den Titel der auf den Startknöpfen und im Fenster für diese Anwendung angezeigt wird. Verwende hier einen möglichst kurzen Text und verzichte auf Sonderzeichen und Zeilenumbrüche.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="jstackArguments">-l</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First</Value>
<Value name="taskTitle">Create Stack Trace for First</Value>
<Value name="processRegExp">^(?:app1|app1-helper)\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second</Value>
<Value name="processRegExp">^second-app\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert processRegExp
¶
Mit dem Wert processRegExp
konfigurierst du einen Regulären Ausdruck der die gewünschten Prozessnamen erkennt, welche erfasst werden sollen.
Wichtig ist hier, dass du den Ausdruck mit ^
und $
einschliesst falls er komplett erkannt werden soll. Ansonsten passen bereits Teilausdrücke auf den Dateinamen des Prozesses.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="jstackArguments">-l</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First</Value>
<Value name="processRegExp">^(?:app1|app1-helper)\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second</Value>
<Value name="processRegExp">^second-app\.exe$</Value>
</ListEntry>
</List>
</Group>
Um einen einzelnen Prozessnamen zu erkennen, verwende beispielsweise ^example\.exe$
. Dabei markiert das ^
Zeichen den Anfang und $
Zeichen das Ende des Textes. Damit muss example.exe
zwischen dem Anfang und Ende des Textes liegen und nicht einfach ein Teil des Namens sein.
Der Punkt .
hat eine spezielle Bedeutung und passt auf alle Zeichen. Markiere ihn daher mit einem Backslash (\.
) damit an dieser Stelle auch wirklich ein Punkt erwartet wird.
Um mehrere verschiedene Prozessnamen zu erkennen, schliesst du diese in einen Auswahlblock ein: ^(?:first|second|last)\.exe$
. Dieser Ausdruck funktioniert mit den Namen first.exe
, second.exe
und last.exe
.
Der Wert outputDirectory
¶
Mit dem Wert outputDirectory
setzt den den absoluten Pfad zu dem Ausgabeverzeichnis in welches die Stack-Traces geschrieben werden sollen. Dieses Verzeichnis muss vor dem Start des Werkzeugs existieren.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert outputFilename
¶
Mit dem optionalen Wert outputFilename
kannst du den Dateinamen ändern, welcher für die Stack-Traces verwendet wird. Dabei kannst du folgende Platzhalter verwenden:
{pid}
fügt den Prozess Identifier ein.{host}
fügt den Computername ein, auf dem der Prozess läuft.{time}
fügt den Zeitstempel ein.
Lässt du den Wert weg, wird der Default st_{time}_UTC_{host}_pid_{pid}.txt
verwendet. Allfällige Sonderzeichen im Dateinamen, wie /:*?<>
, werden durch Unterstriche ersetzt.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="outputFilename">example_{host}_{pid}_{time}.txt</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert outputTimeFormat
¶
Mit dem optionalen Wert outputTimeFormat
änderst du das Zeitformat welches mit dem Platzhalter {time}
eingefügt wird. Lässt du diesen Wert weg, wird der Default yyyyMMdd_HHmmss
verwendet.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="outputFilename">example_{host}_{pid}_{time}.txt</Value>
<Value name="outputTimeFormat">yyyy-MM-dd_HH-mm-ss</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Zeitstempel wird immer in UTC geschrieben. Für das Zeitformat kannst du folgende Platzhalter verwenden:
Ausdruck |
Bedeutung |
---|---|
|
Der Tag als Zahl ohne führende Null ( |
|
Der Tag als Zahl mit führendem Null ( |
|
Der abgekürzte übersetzte Tagesname (Beispielsweise „Mon“ bis „Sun“). |
|
Der übersetzte Tagesname (Beispielsweise „Monday“ bis „Sunday“). |
|
Der Monat als Zahl ohne führende Null ( |
|
Der Monat als Zahl mit führender Null ( |
|
Der abgekürzte übersetzte Monatsname (Beispielsweise „Jan“ bis „Dec“). |
|
Der übersetzte Monatsname (Beispielsweise „January“ bis „December“). |
|
Das Jahr mit zwei Ziffern ( |
|
Das Jahr mit vier Ziffern ( |
|
Die Stunde ohne führende Null ( |
|
Die Stunde mit einer führenden Null ( |
|
Die Stunden ohne führende Null ( |
|
Die Stunde mit einer führenden Null ( |
|
Die Minute ohne führende Null ( |
|
Die Minute mit führender Null ( |
|
Die Sekunde ohne führende Null ( |
|
Die Sekunde mit führender Null ( |
|
Die anzahl Millisekunden ohne führende Nulls ( |
|
Die anzahl Millisekunden mit führenden Nulls ( |
|
Die AM/PM Anzeige mit Grossbuchstaben, stellt das Format von |
|
Die am/pm Anzeige mit Kleinbuchstaben, stellt das Format von |
Der Wert reasonIntro
¶
Mit dem optionalen Wert reasonIntro
änderst du den Text, der vor der Auswahl von den Gründen für den Aufruf des Werkzeugs angezeigt wird. Halte diesen Text kurz.
Lässt du diesen Wert weg, wird der Default „Please select the reason why you started the stack trace tool:“ verwendet.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="reasonIntro">Please select the reason:</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Die Liste reasons
¶
Mit der optionalen Liste reasons
aktivierst du ein Auswahlfenster, welches den Benutzer nach dem Grund für den Aufruf des Werkzeugs fragt. Dabei kann er eine der Optionen in dieser Liste auswählen. Bricht er die Auswahl ab, wird auch kein Stack Trace erstellt. Der gewählte code und text wird zusammen mit dem Stack Trace in die Textdatei geschrieben.
Die Optionen werden genau in der Reihenfolge im Fenster angezeigt, wie du diese Konfigurierst. Lässt du diese Liste weg, oder ist sie leer, wird das Fenster mit der Auswahl nicht angezeigt.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
<List name="reasons">
<ListEntry>
<Value name="title">Application is unresponsive</Value>
<Value name="code">unresponsive</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application is slow</Value>
<Value name="code">slow</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application does not react on input</Value>
<Value name="code">no-input-possible</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application display is not updated</Value>
<Value name="code">ui-not-updated</Value>
</ListEntry>
<ListEntry>
<Value name="title">A function or action does not work as expected</Value>
<Value name="code">unexpected-behaviour</Value>
</ListEntry>
<ListEntry>
<Value name="title">Something else</Value>
<Value name="code">something-else</Value>
</ListEntry>
</List>
</Group>
Der Wert title
¶
Mit dem Wert title
konfigurierst du den Text, der dem Benutzer zur Auswahl angezeigt wird. Halte diesen Text kurz.
Der Wert code
¶
Mit dem Wert code
konfigurierst du einen Maschinenlesbaren Code für die Auswahl des Benutzers. Dieser Code wird zusammen mit dem ausgewählten Text in die Datei mit dem Stack Trace geschrieben. Du kannst den selben Code auch mehrfach für verschiedene Optionen verwenden.
Der Wert noteOnSuccess
¶
Mit dem optionalen Wert noteOnSuccess
zeigst du dem Benutzer eine Notiz an, falls der Stack Trace erfolgreich geschrieben wurde. Diese Notiz wird farblich hervorgehoben und kann ein limitiertes Set von HTML Tags enthalten. Lässt du diesen Wert weg, wird keine Notiz angezeigt.
Um HTML Tags in dem Text zu verwenden, solltest du den Inhalt des Werts mit <![CDATA[
und >\\>
Klammern einschliessen. Sonst werden die HTML Tags als Teil des XML Dokuments interpretiert. Verwendest du kein HTML, solltest du trotzdem die Zeichen <>&
als <
, >
und &
schreiben.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="noteOnSuccess"><![CDATA[
☞ Please enter the problem into the following Excel sheet: <a href="file://server/share/file.xls">Open Excel Sheet</a>.
]]></Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Links im Text¶
Links welche du mit dem <a href="...">
Tag einfügst, kann der Benutzer anklicken. Es wird dabei die Standardanwendung des Betriebssystems gestartet.
Das folgende Beispiel zeigt einen Link auf eine Webseite, welche im Webbrowser gestartet wird:
<a href="https://www.example.com/">Open Example Web</a>
Das nächste Beispiel zeigt einen Link auf eine Datei auf dem Server example
im Share foo
.
<a href="file://example/foo/path/file.doc">Open Word Document</a>
Das folgende Beispiel zeigt einen Link auf eine lokale Datei. Dabei ist es wichtig, das die URL mit file:///
anfängt und der Laufwerksbuchstabe als erstes angegeben wird.
<a href="file:///c:/local.txt">Open Text Document</a>
Wichtig
Verwende immer das „Slash“-Zeichen /
statt dem „Backslash“-Zeichen \
bei Dateipfaden.
Der Wert noteOnFailure
¶
Mit dem optionalen Wert noteOnFailure
zeigst du dem Benutzer eine Notiz an, falls Probleme beim Erstellen des Stack Traces aufgetreten sind. Ansonsten verhält sich dieser Wert wie noteOnSuccess
.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="noteOnFailure"><![CDATA[
Please report this error to the support team!
]]></Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert processListFormat
¶
Mit dem optionalen Wert steuerst du, wie die Prozessliste in die Ausgabedatei geschrieben wird. Lässt du den Wert weg, wird das Format UnicodeFrame
verwendet.
Mögliche Werte sind:
Wert |
Bedeutung |
---|---|
|
Deaktiviert die Ausgabe der Prozessliste |
|
Gibt die Rohdaten in einem Semikolon getrennten Format aus. Dabei sind die CPU-Zeiten in Millisekunden und die Speicherwerte in Bytes. |
|
Gibt die Daten in einer ASCII kompatiblen Tabelle aus. |
|
Gibt die Daten in einer ASCII kompatiblen Tabelle aus. |
|
Gibt die Daten in einer Unicode kompatiblen Tabelle aus. |
|
Gibt die Daten in einer Unicode kompatiblen Tabelle aus. |
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="processListFormat">UnicodeFrame</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert taskTitle
¶
Mit dem optionalen Wert taskTitle
änderst du den Titel des Tasks, falls die Option applicationSelectionEnabled
aktiviert ist. Der Titel wird auf dem Startknopf sowie im Fenstertitel angezeigt.
Lässt du den Wert weg, wird der Default Start JStack Trace
verwendet.
Siehe auch Alternative Startoptionen für mehrere Anwendungen.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="taskTitle">Java Stack Trace</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert applicationSelectionEnabled
¶
Mit dem optionalen Wert applicationSelectionEnabled
konfigurierst du, wie mehrere Anwendungen ausgewählt werden. Lässt du den Wert weg oder setzt ihn auf Yes
, wird beim Start in einem Fenster nach der betroffenen Anwendung gefragt. Setzt du diesen Wert auf No
wird ein Startknopf für jede Anwendung erstellt.
Siehe auch Alternative Startoptionen für mehrere Anwendungen.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="applicationSelectionEnabled">No</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First App</Value>
<Value name="processRegExp">^example\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second App</Value>
<Value name="processRegExp">^foo\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert applicationSelectionIntro
¶
Mit dem optionalen Wert applicationSelectionIntro
änderst du den Text, der vor der Auswahl der Anwendung angezeigt wird. Dieser text ist nur sichtbar wenn der Wert applicationSelectionEnabled
auf Yes
gesetzt ist. Lässt du diesen Wert weg, wird der Default „Please select the affected application“ verwendet.
Siehe auch Alternative Startoptionen für mehrere Anwendungen.
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<Value name="applicationSelectionEnabled">Yes</Value>
<Value name="applicationSelectionIntro">Select the application which caused the issue:</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">First App</Value>
<Value name="processRegExp">^example\.exe$</Value>
</ListEntry>
<ListEntry>
<Value name="name">Second App</Value>
<Value name="processRegExp">^foo\.exe$</Value>
</ListEntry>
</List>
</Group>
Der Wert thankYouMessage
¶
Mit dem optionalen Wert thankYouMessage
passt du die Nachricht an, welche dem Benutzer angezeigt wird um sich bei ihm für seine Mithilfe zu bedanken. Konfigurierst du diesen Wert, aber ohne Inhalt, wird die Nachricht deaktiviert.
Lässt du den Wert weg, wird der Default „You are the best! Thank you for your valuable help!“ verwendet.
Der Wert closeSelectionAfterTask
¶
Mit dem optionalen Wert closeSelectionAfterTask
konfigurierst du, ob das Hauptfenster geschlossen werden soll, nachdem der Benutzer ein Task gestartet hat.
Lässt du diesen Wert weg oder setzt ihn auf Yes
, wird das Fenster nach dem Start des Tasks geschlossen. Setzt du diesen Wert aug No
bleibt das Fenster mit den Task-Knöpfen offen.
Beispielkonfiguration¶
Die folgende Beispielkonfiguration aktiviert und konfiguriert die Aktion jstack
und schreibt eine Logdatei jeder gemachten Aktion.
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration
version="1"
xmlns="http://educateit.ch/software/BlueStone/Configuration/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Module name="Application">
<Group name="jstack">
<Value name="jstackPath">c:\Program Files\Java\jdk-17.0.2\bin\jstack.exe</Value>
<Value name="processRegExp">^example.exe$</Value>
<Value name="outputDirectory">E:\Test\StackTraces</Value>
<List name="applicationList">
<ListEntry>
<Value name="name">Example App</Value>
<Value name="processRegExp">^(?:java|javaw|devenv)\.exe$</Value>
</ListEntry>
</List>
<List name="reasons">
<ListEntry>
<Value name="title">Application is unresponsive</Value>
<Value name="code">unresponsive</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application is slow</Value>
<Value name="code">slow</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application does not react on input</Value>
<Value name="code">no-input-possible</Value>
</ListEntry>
<ListEntry>
<Value name="title">Application display is not updated</Value>
<Value name="code">ui-not-updated</Value>
</ListEntry>
<ListEntry>
<Value name="title">A function or action does not work as expected</Value>
<Value name="code">unexpected-behaviour</Value>
</ListEntry>
<ListEntry>
<Value name="title">Something else</Value>
<Value name="code">something-else</Value>
</ListEntry>
</List>
<Value name="noteOnSuccess"><![CDATA[
☞ Please enter the problem into the following Excel sheet: <a href="file://server/share/file.xls">Open Excel Sheet</a>.
]]></Value>
</Group>
</Module>
<Module name="Log">
<List name="FileWriter">
<ListEntry>
<Value name="LogFilePath">E:\Test\Logs\QuickUserTasks.log</Value>
<Value name="Rotation">Daily</Value>
</ListEntry>
</List>
</Module>
</Configuration>