log.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. switch {
  27. case status >= 500:
  28. color = 31
  29. case status >= 400:
  30. color = 33
  31. default:
  32. color = 32
  33. }
  34. log.Printf(logResponseFmt, reqID, color, status, msg)
  35. if syslogWriter != nil {
  36. syslogMsg := fmt.Sprintf(logResponseSyslogFmt, reqID, status, msg)
  37. switch {
  38. case status >= 500:
  39. if syslogLevel >= syslog.LOG_ERR {
  40. syslogWriter.Err(syslogMsg)
  41. }
  42. case status >= 400:
  43. if syslogLevel >= syslog.LOG_WARNING {
  44. syslogWriter.Warning(syslogMsg)
  45. }
  46. default:
  47. if syslogLevel >= syslog.LOG_NOTICE {
  48. syslogWriter.Notice(syslogMsg)
  49. }
  50. }
  51. }
  52. }
  53. func logNotice(f string, args ...interface{}) {
  54. msg := fmt.Sprintf(f, args...)
  55. log.Print(msg)
  56. if syslogWriter != nil && syslogLevel >= syslog.LOG_NOTICE {
  57. syslogWriter.Notice(msg)
  58. }
  59. }
  60. func logWarning(f string, args ...interface{}) {
  61. msg := fmt.Sprintf(f, args...)
  62. log.Printf(logWarningFmt, msg)
  63. if syslogWriter != nil && syslogLevel >= syslog.LOG_WARNING {
  64. syslogWriter.Warning(fmt.Sprintf(logWarningSyslogFmt, msg))
  65. }
  66. }
  67. func logFatal(f string, args ...interface{}) {
  68. msg := fmt.Sprintf(f, args...)
  69. if syslogWriter != nil {
  70. syslogWriter.Crit(fmt.Sprintf(logFatalSyslogFmt, msg))
  71. }
  72. log.Fatal(msg)
  73. }