| 
 
| 
|  | 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.
 
 |