Like many basic features in a developer's toolbox, Go provides a fairly complete solution built-in for logging. It handles many of the basics, such as creating timestamp-marked log items and saving to disk or to console.
One thing the basic package misses out on is built-in formatting and log rotation, which are key requirements for our file manager application.
Remember that key requirements for our application include the ability to work seamlessly in our concurrent environment and be ready to scale to a distributed network if need be. This is where the fine log4go application comes in handy. Log4go allows logging to file, console, and memory and handles log rotation inherently.
Log4go can be found at https://code.google.com/p/log4go/.
To install Log4go, run the following command:
go get code.google.com/p/log4go
Creating a logfile that handles warnings, notices, debug information, and critical errors is simple and appending log rotation to that is similarly simple, as shown in the following code:
package main import ( logger "code.google.com/p/log4go" ) func main() { logMech := make(logger.Logger); logMech.AddFilter("stdout", logger.DEBUG, logger.NewConsoleLogWriter()) fileLog := logger.NewFileLogWriter("log_manager.log", false) fileLog.SetFormat("[%D %T] [%L] (%S) %M") fileLog.SetRotate(true) fileLog.SetRotateSize(256) fileLog.SetRotateLines(20) fileLog.SetRotateDaily(true) logMech.AddFilter("file", logger.FINE, fileLog) logMech.Trace("Received message: %s)", "All is well") logMech.Info("Message received: ", "debug!") logMech.Error("Oh no!","Something Broke") }