log.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* Copyright 2001,2002 Roger Dingledine, Matej Pfajfar. */
  2. /* See LICENSE for licensing information */
  3. /* $Id$ */
  4. #include "../or/or.h"
  5. #include "log.h"
  6. /* FIXME this whole thing is hacked together. feel free to make it clean. */
  7. size_t sev_to_string(char *buf, int max, int severity) {
  8. assert(max > 20);
  9. switch(severity) {
  10. case LOG_DEBUG:
  11. strcpy(buf,"debug");
  12. break;
  13. case LOG_INFO:
  14. strcpy(buf,"info");
  15. break;
  16. case LOG_NOTICE:
  17. strcpy(buf,"notice");
  18. break;
  19. case LOG_WARNING:
  20. strcpy(buf,"warn");
  21. break;
  22. case LOG_ERR:
  23. strcpy(buf,"err");
  24. break;
  25. case LOG_CRIT:
  26. strcpy(buf,"crit");
  27. break;
  28. case LOG_ALERT:
  29. strcpy(buf,"alert");
  30. break;
  31. case LOG_EMERG:
  32. strcpy(buf,"emerg");
  33. break;
  34. default:
  35. strcpy(buf,"UNKNOWN");
  36. break;
  37. }
  38. return strlen(buf)+1;
  39. }
  40. static void
  41. logv(int severity, const char *funcname, const char *format, va_list ap)
  42. {
  43. static int loglevel = LOG_DEBUG;
  44. char buf[201];
  45. time_t t;
  46. struct timeval now;
  47. if (format) {
  48. if (severity > loglevel)
  49. return;
  50. if (gettimeofday(&now,NULL) < 0)
  51. return;
  52. t = time(NULL);
  53. strftime(buf, 200, "%b %d %H:%M:%S", localtime(&t));
  54. printf("%s.%.3ld ", buf, (long)now.tv_usec / 1000);
  55. sev_to_string(buf, 200, severity);
  56. printf("[%s] ", buf);
  57. if (funcname)
  58. printf("%s(): ", funcname);
  59. vprintf(format,ap);
  60. printf("\n");
  61. } else
  62. loglevel = severity;
  63. }
  64. /* Outputs a message to stdout */
  65. void log(int severity, const char *format, ...)
  66. {
  67. va_list ap;
  68. va_start(ap,format);
  69. logv(severity, NULL, format, ap);
  70. va_end(ap);
  71. }
  72. void _log_fn(int severity, const char *fn, const char *format, ...)
  73. {
  74. va_list ap;
  75. va_start(ap,format);
  76. logv(severity, fn, format, ap);
  77. va_end(ap);
  78. }