Advertisement
Guest User

Metrics on various logging

a guest
Mar 3rd, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. static const char *chaTypes[] = { "SYSTEM1", "SYSTEM2", "SYSTEM3", "SYSTEM4" };
  7.  
  8. void writeLogString(const char *str, int len)
  9. {
  10. }
  11.  
  12. void my_vlogf(int id, int severity, const char *format, va_list args)
  13. {
  14.     //char buffer[1024];
  15.  
  16.     //int len = vsnprintf(buffer, sizeof(buffer), format, args);
  17.  
  18.     fwrite(chaTypes[id], sizeof(char), strlen(chaTypes[id]), stdout);
  19.     fwrite(" ", sizeof(char), 1, stdout);
  20.  
  21.     //fwrite(buffer, sizeof(char), len, stdout);
  22.     vfprintf(stdout, format, args);
  23. }
  24.  
  25. void my_logf(int id, int severity, const char *format, ...)
  26. {
  27.     va_list args;
  28.     va_start(args, format);
  29.     my_vlogf(id, severity, format, args);
  30.     va_end(args);
  31. }
  32.  
  33.  
  34. void mem_logf(int id, int severity, const char *format, ...)
  35. {
  36.     const char *prefix = chaTypes[id];
  37.     size_t len1 = strlen(prefix);
  38.     size_t len2 = strlen(format) + 1;
  39.  
  40.     char newFormat[len1 + len2]; // Here be the allocation
  41.     char buffer[1024];
  42.  
  43.     memcpy(newFormat, prefix, len1);
  44.     memcpy(newFormat + len1, format, len2);
  45.  
  46.     va_list args;
  47.     va_start(args, format);
  48.  
  49.     int len = vsnprintf(buffer, sizeof(buffer), newFormat, args);
  50.  
  51.     va_end(args);
  52.     /*
  53.      * Not sure you actually addressed what the original poster was after,
  54.      * here's your second call to printf.... :/
  55.      *
  56.      * The printf(buffer) is what he had in his example, which actually generates a warning on my compiler
  57.      * considering its unsafe.  There's no garantee that buffer doesn't have something that looks like a
  58.      * format string in it! :/
  59.      */
  60.     //printf(buffer);
  61.     //printf("%s", buffer); // Safer, but second call to printf()!
  62.  
  63.     // This yeilds better performance than the above:
  64.     fwrite(buffer, sizeof(char), len, stdout);
  65. }
  66.  
  67. void null_logf(int id, int severity, const char *format, ...)
  68. {
  69.     // Here we pretend this log level isn't even enabled.
  70.     if (severity < 10)
  71.     {
  72.         /*
  73.          * This is where you would save a lot of time....
  74.          * Clever use of macros can even save you a stack push!
  75.          */
  76.        return;
  77.     }
  78.  
  79.     const char *prefix = chaTypes[id];
  80.     size_t len1 = strlen(prefix);
  81.     size_t len2 = strlen(format) + 1;
  82.  
  83.     char newFormat[len1 + len2]; // Here be the allocation
  84.     char buffer[1024];
  85.  
  86.     memcpy(newFormat, prefix, len1);
  87.     memcpy(newFormat + len1, format, len2);
  88.  
  89.     va_list args;
  90.     va_start(args, format);
  91.  
  92.     int len = vsnprintf(buffer, sizeof(buffer), newFormat, args);
  93.  
  94.     va_end(args);
  95.  
  96.     fwrite(buffer, sizeof(char), len, stdout);
  97. }
  98.  
  99. int main(void)
  100. {
  101.     int i = 0;
  102.     time_t t = time(NULL);
  103.     time_t n;
  104.  
  105.     do
  106.     {
  107.         n = time(NULL);
  108.     } while (n == t);
  109.  
  110.     i = 0;
  111.     t = time(NULL);
  112.  
  113.     do
  114.     {
  115.         mem_logf(1, 0, "number = %d, string = %s", 1, "hi");
  116.         ++i;
  117.         n = time(NULL);
  118.     } while (n == t);
  119.  
  120.     fprintf(stderr, "Ran  mem_logf() %d time(s) in 1 second\r\n", i);
  121.  
  122.     i = 0;
  123.     t = time(NULL);
  124.  
  125.     do
  126.     {
  127.         my_logf(1, 0, "number = %d, string = %s", 1, "hi");
  128.         ++i;
  129.         n = time(NULL);
  130.     } while (n == t);
  131.  
  132.     fprintf(stderr, "Ran   my_logf() %d time(s) in 1 second\r\n", i);
  133.  
  134.     i = 0;
  135.     t = time(NULL);
  136.  
  137.     do
  138.     {
  139.         null_logf(1, 0, "number = %d, string = %s", 1, "hi");
  140.         ++i;
  141.         n = time(NULL);
  142.     } while (n == t);
  143.  
  144.     fprintf(stderr, "Ran null_logf() %d time(s) in 1 second\r\n", i);
  145.  
  146.     return 0;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement