Both static and interactive debugging send a series of predefined log
messages to whatever log file you have specified. It is also possible to
send additional, user-defined messages to the log, using the "<log:...>"
directive.
This directive expects either a simple text or a codeblock as its single argument. If the argument is a code block, that code is expected to return the text of the message; if the argument is anything else, that something else is the literal message. For example:
<rule: ListElem> <Elem= ( [a-z]\d+) > <log: Checking for a suffix, too...> <Suffix= ( : \d+ ) >? <log: (?{ "ListElem: $MATCH{Elem} and $MATCH{Suffix}" })>
User-defined log messages implemented using a codeblock can also specify
a severity level. If the codeblock of a <log:...>
directive returns
two or more values, the first is treated as a log message severity
indicator, and the remaining values as separate lines of text to be
logged. For example:
<rule: ListElem> <Elem= ( [a-z]\d+) > <Suffix= ( : \d+ ) >? <log: (?{ warn => "Elem was: $MATCH{Elem}", "Suffix was $MATCH{Suffix}", })>
When they are encountered, user-defined log messages are interspersed between any automatic log messages (i.e. from the debugger), at the correct level of nesting for the current rule.