package main import ( "fmt" "log" "log/syslog" "net/http" ) const ( logRequestFmt = "[%s] %s: %s" logRequestSyslogFmt = "REQUEST [%s] %s: %s" logResponseFmt = "[%s] |\033[7;%dm %d \033[0m| %s" logResponseSyslogFmt = "RESPONSE [%s] | %d | %s" logWarningFmt = "\033[1;33m[WARNING]\033[0m %s" logWarningSyslogFmt = "WARNING %s" logFatalSyslogFmt = "FATAL %s" ) func logRequest(reqID string, r *http.Request) { path := r.URL.RequestURI() log.Printf(logRequestFmt, reqID, r.Method, path) if syslogWriter != nil { syslogWriter.Notice(fmt.Sprintf(logRequestSyslogFmt, reqID, r.Method, path)) } } func logResponse(reqID string, status int, msg string) { var color int switch { case status >= 500: color = 31 case status >= 400: color = 33 default: color = 32 } log.Printf(logResponseFmt, reqID, color, status, msg) if syslogWriter != nil { syslogMsg := fmt.Sprintf(logResponseSyslogFmt, reqID, status, msg) switch { case status >= 500: if syslogLevel >= syslog.LOG_ERR { syslogWriter.Err(syslogMsg) } case status >= 400: if syslogLevel >= syslog.LOG_WARNING { syslogWriter.Warning(syslogMsg) } default: if syslogLevel >= syslog.LOG_NOTICE { syslogWriter.Notice(syslogMsg) } } } } func logNotice(f string, args ...interface{}) { msg := fmt.Sprintf(f, args...) log.Print(msg) if syslogWriter != nil && syslogLevel >= syslog.LOG_NOTICE { syslogWriter.Notice(msg) } } func logWarning(f string, args ...interface{}) { msg := fmt.Sprintf(f, args...) log.Printf(logWarningFmt, msg) if syslogWriter != nil && syslogLevel >= syslog.LOG_WARNING { syslogWriter.Warning(fmt.Sprintf(logWarningSyslogFmt, msg)) } } func logFatal(f string, args ...interface{}) { msg := fmt.Sprintf(f, args...) if syslogWriter != nil { syslogWriter.Crit(fmt.Sprintf(logFatalSyslogFmt, msg)) } log.Fatal(msg) }