diff options
author | 2018-05-10 03:04:46 +0100 | |
---|---|---|
committer | 2018-05-09 19:04:46 -0700 | |
commit | 874a9986971e0efe27eaec92c523d563dfa8d1f7 (patch) | |
tree | 73fe049679c23e35218a2b8a35c3cfce76e5ac4f /plugin/errors/errors.go | |
parent | 5e7c39911740025d020964922c2a5dc1df36a723 (diff) | |
download | coredns-874a9986971e0efe27eaec92c523d563dfa8d1f7.tar.gz coredns-874a9986971e0efe27eaec92c523d563dfa8d1f7.tar.zst coredns-874a9986971e0efe27eaec92c523d563dfa8d1f7.zip |
plugin/errors: remove panic/recover (#1777)
Remove panic/recover and also use pkg/log to print the error. This
brings some consistency into the logging.
Fixes #1776
Diffstat (limited to 'plugin/errors/errors.go')
-rw-r--r-- | plugin/errors/errors.go | 56 |
1 files changed, 3 insertions, 53 deletions
diff --git a/plugin/errors/errors.go b/plugin/errors/errors.go index a8724f44b..88027b191 100644 --- a/plugin/errors/errors.go +++ b/plugin/errors/errors.go @@ -3,77 +3,27 @@ package errors import ( "context" - "fmt" - "log" - "runtime" - "strings" - "time" "github.com/coredns/coredns/plugin" + clog "github.com/coredns/coredns/plugin/pkg/log" "github.com/coredns/coredns/request" "github.com/miekg/dns" ) // errorHandler handles DNS errors (and errors from other plugin). -type errorHandler struct { - Next plugin.Handler - LogFile string - Log *log.Logger -} +type errorHandler struct{ Next plugin.Handler } // ServeDNS implements the plugin.Handler interface. func (h errorHandler) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { - defer h.recovery(ctx, w, r) - rcode, err := plugin.NextOrFailure(h.Name(), h.Next, ctx, w, r) if err != nil { state := request.Request{W: w, Req: r} - errMsg := fmt.Sprintf("%s [ERROR %d %s %s] %v", time.Now().Format(timeFormat), rcode, state.Name(), state.Type(), err) - - h.Log.Println(errMsg) + clog.Errorf("%d %s %s: %v", rcode, state.Name(), state.Type(), err) } return rcode, err } func (h errorHandler) Name() string { return "errors" } - -func (h errorHandler) recovery(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) { - rec := recover() - if rec == nil { - return - } - - // Obtain source of panic - // From: https://gist.github.com/swdunlop/9629168 - var name, file string // function name, file name - var line int - var pc [16]uintptr - n := runtime.Callers(3, pc[:]) - for _, pc := range pc[:n] { - fn := runtime.FuncForPC(pc) - if fn == nil { - continue - } - file, line = fn.FileLine(pc) - name = fn.Name() - if !strings.HasPrefix(name, "runtime.") { - break - } - } - - // Trim file path - delim := "/coredns/" - pkgPathPos := strings.Index(file, delim) - if pkgPathPos > -1 && len(file) > pkgPathPos+len(delim) { - file = file[pkgPathPos+len(delim):] - } - - panicMsg := fmt.Sprintf("%s [PANIC %s %s] %s:%d - %v", time.Now().Format(timeFormat), r.Question[0].Name, dns.Type(r.Question[0].Qtype), file, line, rec) - // Currently we don't use the function name, since file:line is more conventional - h.Log.Printf(panicMsg) -} - -const timeFormat = "02/Jan/2006:15:04:05 -0700" |