From d15e66a4ff01c8bdffbc54072dc36debb36f0a06 Mon Sep 17 00:00:00 2001 From: Waleed Gadelkareem Date: Wed, 13 Sep 2017 22:14:41 +0200 Subject: [PATCH] check if SetEscapeHTML exists instead of checking Go version --- .travis.yml | 1 - logs/accesslog.go | 38 ++++++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8fca2cb6..2937e6e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,6 @@ install: - go get github.com/gogo/protobuf/proto - go get github.com/Knetic/govaluate - go get github.com/casbin/casbin - - go get github.com/mcuadros/go-version - go get -u honnef.co/go/tools/cmd/gosimple - go get -u github.com/mdempsky/unconvert - go get -u github.com/gordonklaus/ineffassign diff --git a/logs/accesslog.go b/logs/accesslog.go index 07405b32..efe65a3c 100644 --- a/logs/accesslog.go +++ b/logs/accesslog.go @@ -19,14 +19,12 @@ import ( "encoding/json" "time" "fmt" - "github.com/mcuadros/go-version" - "runtime" ) const ( - ApacheFormatPattern = "%s - - [%s] \"%s %d %d\" %f %s %s\n" - ApacheFormat = "APACHE_FORMAT" - JsonFormat = "JSON_FORMAT" + apacheFormatPattern = "%s - - [%s] \"%s %d %d\" %f %s %s\n" + apacheFormat = "APACHE_FORMAT" + jsonFormat = "JSON_FORMAT" ) type AccessLogRecord struct { @@ -44,31 +42,43 @@ type AccessLogRecord struct { RemoteUser string `json:"remote_user"` } -func (r *AccessLogRecord) JSON() ([]byte, error) { +func (r *AccessLogRecord) json() ([]byte, error) { buffer := &bytes.Buffer{} encoder := json.NewEncoder(buffer) - currentGoVersion := version.Normalize(runtime.Version()[2:]) - if version.Compare("1.7", currentGoVersion, "<") { - encoder.SetEscapeHTML(false) - } + disableEscapeHTML(encoder) + err := encoder.Encode(r) return buffer.Bytes(), err } +func disableEscapeHTML(i interface{}) { + e, ok := i.(interface { + SetEscapeHTML(bool) + }); + if ok { + e.SetEscapeHTML(false) + } +} + func AccessLog(r *AccessLogRecord, format string) { var msg string +s + switch format { - if format == ApacheFormat { + case apacheFormat: timeFormatted := r.RequestTime.Format("02/Jan/2006 03:04:05") - msg = fmt.Sprintf(ApacheFormatPattern, r.RemoteAddr, timeFormatted, r.Request, r.Status, r.BodyBytesSent, + msg = fmt.Sprintf(apacheFormatPattern, r.RemoteAddr, timeFormatted, r.Request, r.Status, r.BodyBytesSent, r.ElapsedTime.Seconds(), r.HttpReferrer, r.HttpUserAgent) - } else { - jsonData, err := r.JSON() + case jsonFormat: + fallthrough + default: + jsonData, err := r.json() if err != nil { msg = fmt.Sprintf(`{"Error": "%s"}`, err) } else { msg = string(jsonData) } } + beeLogger.Debug(msg) }