From f20984e6f08489a697988bf6c1cd93556cab46f6 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sun, 21 Aug 2016 12:54:44 -0700 Subject: [PATCH] Improved error logging --- context.go | 8 ++++---- core.go | 4 ++-- goldsmith.go | 15 ++++++++++++--- loader.go | 4 ++++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/context.go b/context.go index a29e9c9..7b33e4c 100644 --- a/context.go +++ b/context.go @@ -45,7 +45,7 @@ func (ctx *context) chain() { var err error filters, err = initializer.Initialize(ctx) if err != nil { - ctx.gs.fault(nil, err) + ctx.gs.fault(ctx.plug.Name(), nil, err) return } } @@ -77,10 +77,10 @@ func (ctx *context) chain() { if accept { if _, err := f.Seek(0, os.SEEK_SET); err != nil { - ctx.gs.fault(f, err) + ctx.gs.fault("core", f, err) } if err := processor.Process(ctx, f); err != nil { - ctx.gs.fault(f, err) + ctx.gs.fault(ctx.plug.Name(), f, err) } } else { ctx.output <- f @@ -93,7 +93,7 @@ func (ctx *context) chain() { if finalizer, ok := ctx.plug.(Finalizer); ok { if err := finalizer.Finalize(ctx); err != nil { - ctx.gs.fault(nil, err) + ctx.gs.fault(ctx.plug.Name(), nil, err) } } } diff --git a/core.go b/core.go index 4a47e5d..8421c37 100644 --- a/core.go +++ b/core.go @@ -85,11 +85,11 @@ func (gs *goldsmith) exportFile(f *file) error { return nil } -func (gs *goldsmith) fault(f *file, err error) { +func (gs *goldsmith) fault(name string, f *file, err error) { gs.errorMtx.Lock() defer gs.errorMtx.Unlock() - ferr := &Error{Err: err} + ferr := &Error{Name: name, Err: err} if f != nil { ferr.Path = f.path } diff --git a/goldsmith.go b/goldsmith.go index b61b865..407cc7a 100644 --- a/goldsmith.go +++ b/goldsmith.go @@ -25,6 +25,7 @@ package goldsmith import ( "bytes" "errors" + "fmt" "io" "os" "time" @@ -97,12 +98,18 @@ type Context interface { } type Error struct { - Err error + Name string Path string + Err error } func (e Error) Error() string { - return e.Err.Error() + var path string + if len(e.Path) > 0 { + path = "@" + e.Path + } + + return fmt.Sprintf("[%s%s]: %s", e.Name, path, e.Err.Error()) } type Initializer interface { @@ -117,4 +124,6 @@ type Finalizer interface { Finalize(ctx Context) error } -type Plugin interface{} +type Plugin interface { + Name() string +} diff --git a/loader.go b/loader.go index 9aae5ac..f077e03 100644 --- a/loader.go +++ b/loader.go @@ -26,6 +26,10 @@ import "path/filepath" type loader struct{} +func (*loader) Name() string { + return "loader" +} + func (*loader) Initialize(ctx Context) ([]string, error) { infos := make(chan fileInfo) go scanDir(ctx.SrcDir(), infos)