Socket
Socket
Sign inDemoInstall

github.com/etnz/logfmt

Package Overview
Dependencies
0
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    github.com/etnz/logfmt

Package logfmt implements a logfmt Record reader and writer. logfmt is defined in https://brandur.org/logfmt as a logging format optimal for easy development, consistency, and good legibility for humans and computers. A Record is a simple line in logfmt. It is a set of attribute that can have or have not a value. The value is either a valid identifier, or a quoted string. Package logfmt can be used to parse logfmt compliant logs. Reader is a simple interface with two methods to read a stream as Records. It parses any io.Reader and return a Record each time. Package logfmt can be used as a simple tool to write logfmt logs. Record can be created using a fluent API based on the usual 'fmt' verbs There are basically only one new "words" to learn: 'K' stands for Key only. Records are then created using a sequence of call to one of these functions. See Examples for more details. The Log method prints the Record in a single line, sorting attributes in 'significance' order. It means that general keys (short name) come first then specific attributes (long name). This Log method is fitted for 'defer'.


Version published

Readme

Source

#logfmt Travis GoDoc

  • Package "logfmt" implements a logger for objects in logfmt format: details
  • Package "logfmt/logreader" implements a parser for logfmt streams: details
  • Package "logfmt/ql" implements an interpreter of a query language for logfmt records. details
  • Package "logfmt/cmd" is a collection of command line utilities for working with logfmt, it complements brandur's own collection. details

#logfmt

To use the package:

go get github.com/etnz/logfmt

logfmt is defined in Brandur's blog as a logging format optimal for easy development, consistency, and good legibility for humans and computers.

at=info method=GET path=/ host=mutelight.org status=200

The example above can be generated like:

logfmt.
  S("at", "info").
  S("method",r.Method).
  S("path", r.URL.Path).
  D("status", code ).
  Log()

Where 'S', 'Q', 'D' are method mapping the usual 'fmt' verbs.

Key/Value are stored in a map, so it's ok to call S("at", "info") several time, the last one is always right.

When writing the line in the output stream, keys are not printed in random order. Logs would be hard to read, and not reproducible. Instead key/value pairs are sorted in significance order: the shortest keys first, then alphabetically

at=info path=/ host=mutelight.org method=GET status=200

It enforce the tendency to keep generic keys short, and specific one longer, the first information you read is the most important.

Usually it is faster than the default "log" package

    r := Rec()
    r.D("timestamp", int(n))
    r.D("at", i)
    r.Q("username", "eric")
    r.K("debug")
    r.Log()

At 1389 ns/op : 720 logs per milliseconds

     log.Printf("at=%d", i)
     log.Printf("debug")
     log.Printf("username=%q\n", "eric")

At 2248 ns/op, that is 445 logs per milliseconds

Because using logfmt, you tend to group together information in less records, but richer, I compared a single logfmt record with 4 attributes with a 3 default logs.

'Record' object is idiomatic:

log:= logfmt.Rec()
defer log.Log()
//set an initial value
r.S("level", "debug")
...
if err != nil{
  r.S("level", "error") // escalate the record
  r.V("err", err)
}

See Examples or directly the godoc for more details.

Still on the workbench

  • rewriter logs (sort keys, filter out some matches), highlight lowlight some lines or keys
  • trim logs (before first match and after last match)

FAQs

Last updated on 25 Feb 2016

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc