[Mono-list] Diagnostic Messages

Jonathan Pryor jonpryor@vt.edu
27 May 2002 09:11:45 -0400

Comments inline.

On Mon, 2002-05-27 at 03:24, Dwivedi , Ajay Kumar wrote:
    Hi all,
    	Great discussion going on. I couln't resist jumping in ;)
    I like the trace functionality but don't like the way they are used. I mean
    writing my own tracelistener etc..Here's my suggestion for the trace classes
    based on the discussion.
    We should Use the config file as in the .NET , our aim is to make mono run
    exactly similiar or better than .NET :) For each key defined in the
    we add a class to the Trace.Listeners by reflection. And every call to
    Trace.Write() calls the Write() methods on eash of the objects in Listener.
I intend to implement application configuration file functionality.  I'm
not sure *when* I'll get there, but I plan on it.

    The default should be not to do anything. The DefaultTraceListener can send
    the output to /dev/null but that would be an added overhead.
Actually, just ignoring the output is easier, and minimizes overhead.

    As lupus suggested, we should allow Environment Variable based
    configurations too. This is especially needed when the application and its
    configuration settings are readonly for a user. (There doesn't seem to be
    any security risks involved)
A reason I hadn't considered.  However, I would hope that application
configuration files would be per-user on Unix, so that there wouldn't be
read-only configuration files.

    Further, mono should have some built-in TraceListeners. These should include
    syslog, file and console listener. Lazy developers like me might not like to
    write their own listeners ;) We can use the syslog library call for
    implementing syslog.
File and console listeners are already present: see the
`TextWriterTraceListener', which can take a `TextWriter' (such as
`Console.Out') or a string filename as arguments.

`syslog' looks like it wouldn't be a good idea for diagnostic messages,
since the root user would need to get involved in order to view the
messages.  Instead the `System.Diagnostic.EventLog' (and related)
classes would probably be a more appropriate wrapper for `syslog'.

    Happy Hacking,
    PS: While going through the Mono source for Trace class, I see all the
    methods delegated to an internal class. Trace is not an abstract class, so
    is there any particular reason for doing so?
Primarily because the `Trace' and `Debug' classes are 99% identical. 
The only difference between the two classes is that the `Trace' methods
are conditional on the `TRACE' symbol, while the `Debug' methods are
conditional on the `DEBUG' symbol.  Hence the presence of `TraceImpl',
to contain the shared functionality.

 - Jon