mirror of
https://github.com/thegeeklab/wp-plugin-go.git
synced 2024-11-22 00:20:38 +00:00
Add errors package for exit code handling
To get a better exit code handling including logrus logging I have defined a custom errors package which uses logrus to log error messages.
This commit is contained in:
parent
7d346ea6f4
commit
5f7190189d
73
errors/errors.go
Normal file
73
errors/errors.go
Normal file
@ -0,0 +1,73 @@
|
||||
package errors
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// ExitCoder defines the interface for exit code handling.
|
||||
type ExitCoder interface {
|
||||
error
|
||||
Code() int
|
||||
Fields() logrus.Fields
|
||||
}
|
||||
|
||||
// ExitError simply implements the defined interface.
|
||||
type ExitError struct {
|
||||
message interface{}
|
||||
code int
|
||||
fields logrus.Fields
|
||||
}
|
||||
|
||||
// Error implements the ExitCoder interface.
|
||||
func (e ExitError) Error() string {
|
||||
return fmt.Sprintf("%v", e.message)
|
||||
}
|
||||
|
||||
// Code implements the ExitCoder interface.
|
||||
func (e ExitError) Code() int {
|
||||
return e.code
|
||||
}
|
||||
|
||||
// Fields implements the ExitCoder interface.
|
||||
func (e ExitError) Fields() logrus.Fields {
|
||||
return e.fields
|
||||
}
|
||||
|
||||
// ExitMessage initiales a new ExitCoder implementation.
|
||||
func ExitMessage(message interface{}) ExitError {
|
||||
return ExitError{
|
||||
message: message,
|
||||
code: 1,
|
||||
}
|
||||
}
|
||||
|
||||
// WithFields initiales a new ExitCoder implementation.
|
||||
func WithFields(message interface{}, fields logrus.Fields) ExitError {
|
||||
return ExitError{
|
||||
message: message,
|
||||
code: 1,
|
||||
fields: fields,
|
||||
}
|
||||
}
|
||||
|
||||
// HandleExit ist used within the main handler to exit properly.
|
||||
func HandleExit(err error) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if e, ok := err.(ExitCoder); ok {
|
||||
if e.Error() != "" {
|
||||
logrus.WithFields(
|
||||
e.Fields(),
|
||||
).Error(
|
||||
e.Error(),
|
||||
)
|
||||
}
|
||||
|
||||
os.Exit(e.Code())
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user