Skip to content

Logger

The package logger provides an interface for logging. It wraps awesome existing go loggers with that interface. In that case, it is easy to change the log provider without breaking anything in your application.

Additionally log level, fields, time duration or caller information can be added.

Register

To register a logger by your requirements, simple use the logger.Register function. The registered logger must implement the logger.Provider interface.

This should be done in the init() function or any other early stage in your application.

For a list of all existing provider see providers section.

// Example of the memory cache provider
logrus := logrus.New()
// the wrapped logrus instance can be configured as needed.
logrus.Instance.ReportCaller = true

// register the logger under a defined name
err = logrus.Register("importLogger",logrus)
//...

Usage

Use Get() to get a registered logger instance.

// get the logger
log,err := logger.Get("importLogger")

// set some default logger settings.
log.SetCallerFields(true)
log.SetLogLevel(logger.TRACE)

// creates a new info log entry.
log.Info("something")

// log with some details
log.WithFields(logger.Fields{"foo":"bar"}).Info("something")

// log with timer
ltimer := log.WithTimer()
//.. some logic
ltimer.Debug("some time") //Field "duration" is added with the required time.

SetCallerFields

If you call SetCallerFields on a logger instance, it will add the file name and line number as fields. Default it is set to false. The caller will be set global for this logger instance.

log.SetCallerFields(true)

SetLogLevel

Defines the level where it should start logging. Available log levels are logger.TRACE,logger.DEBUG,logger.INFO ,logger.WARNING,logger.ERROR and logger.PANIC. Default it is set to logger.DEBUG. The level will be set global for this logger instance.

log.SetLogLevel(logger.INFO)

Log Level

The following log levels are available.

log.Trace("msg")
log.Debug("msg")
log.Info("msg")
log.Warning("msg")
log.Error("msg")
log.Panic("msg")

WithFields

Sometimes a log message is not enough and some additional information is required.

Info

WithFields will create a new instance.

log.WithFields(logger.Fields{"foo":"bar"}).Info("msg")

WithTimer

Sometimes it is useful for debugging to see the required time of a function. WithTimer can be combined WithFields or vis-a-vis.

Info

WithTimer will create a new instance.

ltimer := log.WithTimer()
//...
ltimer.Debug("msg") // a Field "duration" with the required time is added.

// combinde with fields
ltimer = log.WithFields(logger.Fields("foo":"bar")).WithTimer()
//...
ltimer.Debug("msg")// a Field "duration" and "foo" is added.

New

Sometimes its useful to create a logger with slightly a different configuration. The new instance will inherit the setting of the parent logger by default.

log,err := logger.Get("importLogger")
log.SetCallerFields(true)
log.SetLogLevel(logger.WARNING)

// create a new instance and add different settings.
log2 := log.New()
log2.SetCallFields(false)
log2.SetLogLevel(logger.TRACE)

Providers

All pre-defined providers:

Logrus

A wrapper for logrus.

Package:

github.com/patrickascher/gofer/logger/logrus

Options:

The original logrus struct can be accessed by the Instance field. Please check the github page for the documentation.

Usage:

import "github.com/patrickascher/gofer/logger"
import "github.com/patrickascher/gofer/logger/logrus"

logrusProvider := logrus.New()
logrusProvider.Instance.ReportCaller = true

// register the logger
err := logger.Register("logger-name", logrusProvider)

// somewhere in the application
log,err := logger.Get("logger-name")

Create your own provider

To create your own provider, you have to implement the logger.Provider interface.

type Provider interface {
    Log(Entry)
}

The registered value must be of the type logger.Provider.

type MyLogger struct{
}

func (ml *MyLogger) Log(Entry){
    // ... do something
}

// register the logger
err := logger.Register("my-logger", &MyLogger{})

// somewhere in the application
log,err := logger.Get("my-logger")

Entry

The logger.Entry holds all information about the log message.

type Entry struct {
    Level     level
    Timestamp time.Time
    Message   string
    Fields    Fields
}