Structured, pluggable logging for Go.
Go to file
Simon Eskildsen 6c895096e8 split into multiple files 2014-02-23 19:50:42 -05:00
README.md Fix some quotes 2013-10-16 15:28:51 -04:00
entry.go split into multiple files 2014-02-23 19:50:42 -05:00
logger.go split into multiple files 2014-02-23 19:50:42 -05:00
logrus.go split into multiple files 2014-02-23 19:50:42 -05:00

README.md

Logrus

Logrus is a simple, opinionated logging package for Go. It has three debugging levels:

  • LevelDebug: Debugging, usually turned off for deploys.
  • LevelInfo: Info, useful for monitoring in production.
  • LevelWarning: Warnings that should definitely be noted. These are sent to airbrake.
  • LevelFatal: Fatal messages that causes the application to crash. These are sent to airbrake.

Usage

The global logging level is set by: logrus.Level = logrus.{LevelDebug,LevelWarning,LevelFatal}.

Note that for airbrake to work, airbrake.Endpoint and airbrake.ApiKey should be set.

There is a global logger, which new loggers inherit their settings from when created (see example below), such as the place to redirect output. Logging can be done with the global logging module:

logrus.Debug("Something debugworthy happened: %s", importantStuff)
logrus.Info("Something infoworthy happened: %s", importantStuff)

logrus.Warning("Something bad happened: %s", importantStuff)
// Reports to Airbrake

logrus.Fatal("Something fatal happened: %s", importantStuff)
// Reports to Airbrake
// Then exits

Types are encouraged to include their own logging object. This allows to set a context dependent prefix to know where a certain message is coming from, without cluttering every single message with this.

type Walrus struct {
  TuskSize uint64
  Sex      bool
  logger logrus.Logger
}

func NewWalrus(tuskSize uint64, sex bool) *Walrus {
  return &Walrus{
    TuskSize: tuskSize,
    Sex: bool,
    logger: logrus.NewLogger("Walrus"),
  }
}

func (walrus *Walrus) Mate(partner *Walrus) error {
  if walrus.Sex == partner.Sex {
    return errors.New("Incompatible mating partner.")
  }

  walrus.logger.Info("Walrus with tusk sizes %d and %d are mating!", walrus.TuskSize, partner.TuskSize)
  // Generates a logging message: <timestamp> [Info] [Walrus] Walrus with tusk sizes <int> and <int> are mating!

  // Walrus mating happens here

  return nil
}