aboutsummaryrefslogtreecommitdiff
path: root/plugin/errors/errors.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2018-05-10 03:04:46 +0100
committerGravatar Yong Tang <yong.tang.github@outlook.com> 2018-05-09 19:04:46 -0700
commit874a9986971e0efe27eaec92c523d563dfa8d1f7 (patch)
tree73fe049679c23e35218a2b8a35c3cfce76e5ac4f /plugin/errors/errors.go
parent5e7c39911740025d020964922c2a5dc1df36a723 (diff)
downloadcoredns-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.go56
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"