werr

package module
v0.0.0-...-5a1027f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 10, 2016 License: MIT Imports: 3 Imported by: 0

README

Error Wrapper

GoDoc Codeship Codecov Go Report Card

Error Wrapper creates an wrapper for the error type in Go which captures the File, Line and Stack of where it was called.

Installation

go get -u github.com/txgruppi/werr

Why?

I don't like to use panic.

I want my apps to run forever and just output errors to a log.

Usually I write my logs using logger.Printf("%#v", err) but I needed more info related to the error, so I created this package.

Example

package main

import (
	"fmt"
	"os"

	"github.com/txgruppi/werr"
)

func main() {
	file, err := os.Open("/tmp/my-missing-file")
	if err != nil {
		err = werr.Wrap(err)                        // Wrap it
		fmt.Println(err.Error())                    // Return the original error message
		if wrapped, ok := err.(*werr.Wrapper); ok { // Try to convert to `*werr.Wrapper`
			lg, _ := wrapped.Log() // Generate the log message
			fmt.Println(lg)        // Print the log message
		}
	}
	defer file.Close()
}

This code will output something line this:

open /tmp/my-missing-file: no such file or directory
/Users/txgruppi/code/temp/test.go:13 open /tmp/my-missing-file: no such file or directory
goroutine 1 [running]:
github.com/txgruppi/werr.Wrap(0x2208246900, 0x208270300, 0x0, 0x0)
        /Users/txgruppi/code/go/src/github.com/txgruppi/werr/funcs.go:24 +0x153
main.main()
        /Users/txgruppi/code/temp/test.go:13 +0x72

Tests

go get -u -t github.com/txgruppi/werr
cd $GOPATH/src/github.com/txgruppi/werr
go test ./...

License

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// StackArraySize defines the number of bytes which will be allocated for the
	// stack trace.
	// Any value `<= 0` will result in not creating the stack trace.
	StackArraySize = 512

	// LogLine is the format used by `*Wrapper.Log()`.
	// It should be a valid `text/template` string.
	// The data passed to the `Execute` method of the template is the `*Wrapper`
	// instance, which means that you can use all `*Wrapper` methods and
	// attributes inside the template.
	LogLine = "{{.File}}:{{.Line}} {{.Original.Error}}\n{{printf \"%s\" .Stack}}\n\n"
)

Functions

func Unwrap

func Unwrap(err error) error

Unwrap returns the original error inside an `*Wrapper` instance. If `err` is `nil` it will return `nil`. If `err` is an instance of `*Wrapper` it will return the value of the `Original` attribute. Anything else will be returned without any modification.

func Wrap

func Wrap(err error) error

Wrap creates an `*Wrapper` instance with the file, line and stack trace of the moment when it is called. If `StackArraySize` is `<= 0` the stack trace will not be generated. If `err` is `nil` it will return `nil`. If `err` is an `*Wrapper` it will return the same `err` variable. Anything else will be put in the `Original` attribute of `*Wrapper`

Types

type Wrapper

type Wrapper struct {
	Original error
	File     string
	Line     int
	Stack    []byte
}

Wrapper is the struct which holds the `Original` error and the data related to this error. You should not create an instance of `*Wrapper` by yourself, you should call the `Wrap` function, which will set all the values for you automatically.

func (*Wrapper) Error

func (w *Wrapper) Error() string

func (*Wrapper) Log

func (w *Wrapper) Log() (string, error)

Log returns an string which is created by `LogLine` execution. If can return an error if any template-related function returns an error.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL