Skip to content

Simple, fast, opinionated logging for command line applications in Go

License

Notifications You must be signed in to change notification settings

FollowTheProcess/log

log

License Go Reference Go Report Card GitHub CI codecov

Simple, fast, opinionated logging for command line applications 🪵

demo

Project Description

log is a tiny and incredibly simple logging library designed to output nicely presented, human readable, levelled log messages. Ideal for command line applications ✨

There are many great logging libraries for Go out there, but so many of them are IMO too flexible and too complicated. I wanted a small, minimal dependency, opinionated logger I could use everywhere across all my Go projects (which are mostly command line applications). So I made one 🚀

Installation

go get go.followtheprocess.codes/log@latest

Quickstart

package main

import (
    "fmt"
    "os"

    "go.followtheprocess.codes/log"
)

func main() {
    logger := log.New(os.Stderr)

    logger.Debug("Debug me") // By default this one won't show up, default log level is INFO
    logger.Info("Some information here", "really", true)
    logger.Warn("Uh oh!")
    logger.Error("Goodbye")
}

Usage Guide

Make a new logger

logger := log.New(os.Stderr)

Levels

log provides a levelled logger with the normal levels you'd expect:

log.LevelDebug
log.LevelInfo
log.LevelWarn
log.LevelError

You write log lines at these levels with the corresponding methods on the Logger:

logger.Debug("...") // log.LevelDebug
logger.Info("...")  // log.LevelInfo
logger.Warn("...")  // log.LevelWarn
logger.Error("...") // log.LevelError

And you can configure a Logger to display logs at or higher than a particular level with the WithLevel option...

logger := log.New(os.Stderr, log.WithLevel(log.LevelDebug))

Key Value Pairs

log provides "semi structured" logs in that the message is free form text but you can attach arbitrary key value pairs to any of the log methods

logger.Info("Doing something", "cache", true, "duration", 30 * time.Second, "number", 42)

You can also create a "sub logger" with persistent key value pairs applied to every message

sub := logger.With("sub", true)

sub.Info("Hello from the sub logger", "subkey", "yes") // They can have their own per-method keys too!

demo

Prefixes

log lets you apply a "prefix" to your logger, either as an option to log.New or by creating a "sub logger" with that prefix!

logger := log.New(os.Stderr, log.Prefix("http"))

Or...

logger := log.New(os.Stderr)
prefixed := logger.Prefixed("http")

demo

About

Simple, fast, opinionated logging for command line applications in Go

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •  

Languages