new Trace addition for Tango, plus log.format()

Kris foo at bar.com
Tue Oct 2 00:15:07 PDT 2007


There's been some new developments here today. While Tango has always had a 
robust logging package reminiscent of Log4J, a lot of folk tend to use 
Stdout or Stderr instead. To better support the needs of simplistic debug 
tracing, a dedicated module has been added:

---------
import tango.util.log.Trace;

Trace.formatln ("temperature is {} degrees", 101);
---------

Note that this uses the same syntax (and code) as Stdout and friends, but is 
also synchronized/serialized (via an output filter, for those interested in 
such things). At some later point, it may optionally tie into the more 
capable logging package.

Speaking of which, the Tango logging package now internally supports 
formatted output:

-----------
import tango.util.log.Log;

void doingSomethingInteresting (Logger log)
{
      char[128] tmp;
       ...
       ...
       log.info (log.format (tmp, "temperature is {} degrees", celcius));
       ...
       if (dangerous)
           log.warn ("OMG! It's too freaking hot");
}
-----------

Two things to note:

1. log expressions are 'lazy', so they don't get evaluated unless the log 
instance is actually enabled for info, warnings, or the other categories.

2. the formatter requires a temporary buffer (the first argument) to 
construct the output within. This is so that (a) log formatting is 
thread-safe, and (b) the lazy expression can produce something within scope.

Log output-formatting is optional, of course, but it's handy when you need 
it. For those who are not familiar with Tango logging, it supports a variety 
of output styles, a selection of log 'targets' (console, network, files, 
email, etc) and is highly configurable both at compile time and runtime. 
Here's a simplistic example, where a console configuration shows 
milliseconds since the process started:

-----
2 Info  example.logging - 167 prime numbers found in 2 millseconds
2 Trace example.logging - prime found: 1
2 Trace example.logging - prime found: 3
----

At runtime, for instance, you can hook an administrative web-page (package 
is provided) into your application to dynamically configure log-output at 
runtime. When combined with remote-logging to an network application such as 
Chainsaw, the combination enables dynamic & interactive monitoring of remote 
processes. This is often more useful than generic traces to the local 
console.

- Kris 





More information about the Digitalmars-d-announce mailing list