LCOV - code coverage report
Current view: top level - src - DebugLogger.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 20 44 45.5 %
Date: 2010-12-13 Functions: 6 9 66.7 %
Branches: 6 30 20.0 %

           Branch data     Line data    Source code
       1                 :            : // $Id: DebugLogger.cc 4771 2007-08-11 05:50:24Z vern $
       2                 :            : 
       3                 :            : #ifdef DEBUG
       4                 :            : 
       5                 :            : #include <stdlib.h>
       6                 :            : #include <unistd.h>
       7                 :            : 
       8                 :            : #include "DebugLogger.h"
       9                 :            : #include "Net.h"
      10                 :            : 
      11                 :          6 : DebugLogger debug_logger("debug");
      12                 :            : 
      13                 :            : // Same order here as in DebugStream.
      14                 :            : DebugLogger::Stream DebugLogger::streams[NUM_DBGS] = {
      15                 :            :         { "serial", 0, false }, { "rules", 0, false }, { "comm", 0, false },
      16                 :            :         { "state", 0, false }, { "chunkedio", 0, false },
      17                 :            :         { "compressor", 0, false }, {"string", 0, false },
      18                 :            :         { "notifiers", 0, false },  { "main-loop", 0, false },
      19                 :            :         { "dpd", 0, false }, { "tm", 0, false },
      20                 :            : };
      21                 :            : 
      22                 :          3 : DebugLogger::DebugLogger(const char* filename)
      23                 :            :         {
      24 [ +  - ][ #  # ]:          3 :         if ( filename )
      25                 :            :                 {
      26                 :          3 :                 filename = log_file_name(filename);
      27                 :            :                 
      28                 :          3 :                 file = fopen(filename, "w");
      29   [ -  +  #  # ]:          3 :                 if ( ! file )
      30                 :            :                         {
      31                 :          0 :                         fprintf(stderr, "Can't open '%s' for debugging output.", filename);
      32                 :          0 :                         exit(1);
      33                 :            :                         }
      34                 :            : 
      35                 :          3 :                 setvbuf(file, NULL, _IOLBF, 0);
      36                 :            :                 }
      37                 :            :         else
      38                 :          0 :                 file = stderr;
      39                 :            : 
      40                 :          3 :         verbose = false;
      41                 :          3 :         }
      42                 :            : 
      43                 :          3 : DebugLogger::~DebugLogger()
      44                 :            :         {
      45 [ +  - ][ #  # ]:          3 :         if ( file != stderr )
      46                 :          3 :                 fclose(file);
      47                 :          3 :         }
      48                 :            : 
      49                 :          0 : void DebugLogger::EnableStreams(const char* s)
      50                 :            :         {
      51                 :          0 :         char* tmp = copy_string(s);
      52                 :            :         char* brkt;
      53                 :          0 :         char* tok = strtok(tmp, ",");
      54                 :            : 
      55         [ #  # ]:          0 :         while ( tok )
      56                 :            :                 {
      57                 :            :                 int i;
      58         [ #  # ]:          0 :                 for ( i = 0; i < NUM_DBGS; ++i )
      59         [ #  # ]:          0 :                         if ( strcasecmp(streams[i].prefix, tok) == 0 )
      60                 :            :                                 {
      61                 :          0 :                                 streams[i].enabled = true;
      62                 :          0 :                                 break;
      63                 :            :                                 }
      64                 :            : 
      65         [ #  # ]:          0 :                 if ( i == NUM_DBGS )
      66                 :            :                         {
      67         [ #  # ]:          0 :                         if ( strcasecmp("verbose", tok) == 0 )
      68                 :          0 :                                 verbose = true;
      69                 :            :                         else
      70                 :          0 :                                 internal_error("unknown debug stream %s\n", tok);
      71                 :            :                         }
      72                 :            : 
      73                 :          0 :                 tok = strtok(0, ",");
      74                 :            :                 }
      75                 :          0 :         }
      76                 :            : 
      77                 :     276726 : void DebugLogger::Log(DebugStream stream, const char* fmt, ...)
      78                 :            :         {
      79                 :     276726 :         Stream* g = &streams[int(stream)];
      80                 :            : 
      81         [ +  - ]:     276726 :         if ( ! g->enabled )
      82                 :     276726 :                 return;
      83                 :            : 
      84                 :            :         fprintf(file, "%17.06f/%17.06f [%s] ",
      85                 :          0 :                         network_time, current_time(true), g->prefix);
      86                 :            : 
      87         [ #  # ]:          0 :         for ( int i = g->indent; i > 0; --i )
      88                 :          0 :                 fputs("   ", file);
      89                 :            : 
      90                 :            :         va_list ap;
      91                 :          0 :         va_start(ap, fmt);
      92                 :          0 :         vfprintf(file, fmt, ap);
      93                 :          0 :         va_end(ap);
      94                 :            : 
      95                 :          0 :         fputc('\n', file);
      96                 :     276726 :         fflush(file);
      97 [ +  - ][ +  - ]:          6 :         }
      98                 :          3 : 
      99                 :            : #endif

Generated by: LCOV version 1.8