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.