This section of the archives stores flipcode's complete Developer Toolbox collection, featuring a variety of mini-articles and source code contributions from our readers.

| Multi-level Trace Function Submitted by

My submission for a Code of the Day is a trace function as follows: These two files provide a useful method of logging to a file supporting different levels of output at run time. A source file would include the header and the following code:

    static char THIS_FILE[] = __FILE__;
    static char THIS_VERSION[] = "1.0";

Then whenever you wish to log something call like this:

    TRACEF (TRACE_VERBOSE, ("PageManager ()\n"));
    TRACEF (TRACE_ERROR, ("fopen (%s) failed\n", filename));
    TRACEF (TRACE_FATAL, ("Out of memory\n"));

and you would get out like this:

    2001-01-09 08:32:25 Trace:d:\proggy\igdi\page.cpp 1.0:44:PageManager ()
    2001-01-09 08:32:25 Error:d:\proggy\igdi\map.cpp 1.0:165:fopen (map.dat) failed
    2001-01-09 08:32:25 Fatal:D:\proggy\igdi\input.cpp 1.0:114:Out of memory

    [date] [time] [role] [file] [version] [line] ...

--
Diane Youdale
louise@imbrugliamail.com

Currently browsing [trace.zip] (1,162 bytes) - [console.h] - (606 bytes)

    /* tab setting : 4
     *
     * Console definition
     *
     * 6 december 2k	fnjordy
     * 30 december 2k            added trace function
     */

    #ifndef __CONSOLE_H
    #define __CONSOLE_H

    /*
     * Global variables
     */

    typedef enum { TRACE_VERBOSE, TRACE_INFO, TRACE_WARNING, TRACE_ERROR, TRACE_FATAL } trace_t;

    /*
     * Global functions
     */

    #define TRACEF(r,x)	tracef (THIS_FILE, THIS_VERSION, __LINE__, (r)); \
    					printf x

    extern int tracef (char*, char*, int, trace_t);

    extern void printf (char*, ...);
    extern void init_console (void);

    #endif /* __CONSOLE_H */

    /* end of file */

Currently browsing [trace.zip] (1,162 bytes) - [console.cpp] - (1,233 bytes)

    /* tab setting : 4
     *
     * Console definition
     *
     * 6 december 2k	fnjordy
     * 30 december 2k             added trace
     */

    /* precompiled jism */
    #include "StdAfx.h"

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    #include "console.h"

    /* locals */
    static FILE *fptr;

    #define DEBUG_FILE "debug.log"

    static char* time_format = "%Y-%m-%d %H:%M:%S";
    static char* roles[] = { "Trace",
    						 "Info",
    						 "Warning",
    						 "Error",
    						 "Fatal" };

    /* code */

    int
    tracef (char* this_file,
    		char* this_version,
    		int line_number,
    		trace_t role)
    {
    	char buffer[1024];
    	time_t uct_time;
    	struct tm* display_time;

    	time (&uct_time);
    	display_time = localtime (&uct_time);
    	strftime (buffer, sizeof (buffer), time_format, display_time);
    	return fprintf (fptr, "%s %s:%s %s:%i:", buffer, roles[role], this_file, this_version, line_number);
    }

    void
    printf (char *fmt, ...)
    {
    	char buffer[1024];
        va_list	va;

        va_start (va, fmt);
        vsprintf (buffer, fmt, va);
        va_end (va);

    	fputs (buffer, fptr);
    	fflush (fptr);
    }

    void
    init_console (void)
    {
    	if ((fptr = fopen (DEBUG_FILE, "w")) == NULL) {
    		/* arse */
    		exit (-1);
    	}
    }

    /* eof */

The zip file viewer built into the Developer Toolbox made use of the zlib library, as well as the zlibdll source additions.

Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
Please read our Terms, Conditions, and Privacy information.