I recently conducted a poll in the Go community regarding which logging library they use in their personal or professional project. The results were interesting. In this post I have jotted down the most favorite logging libraries and here is my opinion about them.
Analysis of Results
Selection of the candidates
For choosing the candidates for the poll, I didn’t do any thorough research. I was looking for a library to use in my project at work, and I ended up at sirupsen/logrus which was already being used by one of the dependencies in that project.
After reading the README of the logrus, I noted it was in maintenance mode and no new feature was actively being developed. I still decided to use this library because logrus is a mature project and it has all the features which a logging library should have.
I started a poll on r/golang with these four candidates, but also came to know about glog which was a go port of a C++ project by Google. I used that option in the poll conducted on LinkedIn.
I haven’t personally used any one of them yet.
Let’s talk about logrus first, it was the first library I landed upon when looking for one. The reason I looked at it first is that logrus was already one of the indirect dependencies of one of the dependencies in my project.
logrus stands 2nd in the place. zerolog is faster than logrus but there’s a reason it stands seconds among 4. It has been there for a while.
The main reason you’d want to use zerolog if you are switching from logrus is the performance. Go is blazingly fast; but if your logger is making it slow, your application gets no benefit from being implemented in Go.
This is what zerolog’s README says:
The zerolog package provides a fast and simple logger dedicated to JSON output.
Zerolog’s API is designed to provide both a great developer experience and stunning performance. Its unique chaining API allows zerolog to write JSON (or CBOR) log events by avoiding allocations and reflection.
zap is probably the most loved logging library for Go. Among 817 people who have voted on r/golang, 315 voted for zap.
According to the stats on their GitHub, zap is the fastest logger available there.
Also, zap only supports the two most recent minor versions of Go. So you might be locked with an older version of zap if your project for some reason is not able to update to the latest version of Go.
To have an opinion, I feel that I use them all before coming to a conclusion. But after this poll, I think I’m going to start using zap right away. What is your opinion? Why factor was responsible when you were choosing your logging library.