1
0

log.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "log/syslog"
  6. "net/http"
  7. )
  8. const (
  9. logRequestFmt = "[%s] %s: %s"
  10. logRequestSyslogFmt = "REQUEST [%s] %s: %s"
  11. logResponseFmt = "[%s] |\033[7;%dm %d \033[0m| %s"
  12. logResponseSyslogFmt = "RESPONSE [%s] | %d | %s"
  13. logWarningFmt = "\033[1;33m[WARNING]\033[0m %s"
  14. logWarningSyslogFmt = "WARNING %s"
  15. logFatalSyslogFmt = "FATAL %s"
  16. )
  17. func logRequest(reqID string, r *http.Request) {
  18. path := r.URL.RequestURI()
  19. log.Printf(logRequestFmt, reqID, r.Method, path)
  20. if syslogWriter != nil {
  21. syslogWriter.Notice(fmt.Sprintf(logRequestSyslogFmt, reqID, r.Method, path))
  22. }
  23. }
  24. func logResponse(reqID string, status int, msg string) {
  25. var color int
  26. if status >= 500 {
  27. color = 31
  28. } else if status >= 400 {
  29. color = 33
  30. } else {
  31. color = 32
  32. }
  33. log.Printf(logResponseFmt, reqID, color, status, msg)
  34. if syslogWriter != nil {
  35. msg := fmt.Sprintf(logResponseSyslogFmt, reqID, status, msg)
  36. if status >= 500 {
  37. if syslogLevel >= syslog.LOG_ERR {
  38. syslogWriter.Err(msg)
  39. }
  40. } else if status >= 400 {
  41. if syslogLevel >= syslog.LOG_WARNING {
  42. syslogWriter.Warning(msg)
  43. }
  44. } else {
  45. if syslogLevel >= syslog.LOG_NOTICE {
  46. syslogWriter.Notice(msg)
  47. }
  48. }
  49. }
  50. }
  51. func logNotice(f string, args ...interface{}) {
  52. msg := fmt.Sprintf(f, args...)
  53. log.Print(msg)
  54. if syslogWriter != nil && syslogLevel >= syslog.LOG_NOTICE {
  55. syslogWriter.Notice(msg)
  56. }
  57. }
  58. func logWarning(f string, args ...interface{}) {
  59. msg := fmt.Sprintf(f, args...)
  60. log.Printf(logWarningFmt, msg)
  61. if syslogWriter != nil && syslogLevel >= syslog.LOG_WARNING {
  62. syslogWriter.Warning(fmt.Sprintf(logWarningSyslogFmt, msg))
  63. }
  64. }
  65. func logFatal(f string, args ...interface{}) {
  66. msg := fmt.Sprintf(f, args...)
  67. if syslogWriter != nil {
  68. syslogWriter.Crit(fmt.Sprintf(logFatalSyslogFmt, msg))
  69. }
  70. log.Fatal(msg)
  71. }