Log is an easy to use golang logging library. It supports level based and asynchronized logging. It's designed to be used as a drop-in replacement of the standard log package
go get github.com/gofiddle/log
Create a logger which writes to a log file.
package main
import "github.com/gofiddle/log"
func main() {
logger, err := log.NewFileLogger("/var/log", "gofiddle", log.LOG_LEVEL_INFO)
if err != nil {
panic(err)
}
defer logger.Close()
logger.Trace("This is a trace message.")
logger.Debug("This is a debug message.")
logger.Info("Hello World!")
logger.Warn("This is a warnning message.")
logger.Error("This is an error message.")
}
Create a logger which writes to a http log server.
package main
import "github.com/gofiddle/log"
func startLogServer() {
// Let's start a simple http log server on port 8080
// ...
}
func main() {
startLogServer()
logger := log.NewHTTPLogger("http://example.com:8080/log", log.LOG_LEVEL_INFO)
logger.Trace("This is a trace message.")
logger.Debug("This is a debug message.")
logger.Info("Hello World!")
logger.Warn("This is a warnning message.")
logger.Error("This is an error message.")
}
package main
import (
"os"
"github.com/gofiddle/log"
)
func main() {
logger, err := log.New(os.Stdout, log.LOG_LEVEL_INFO)
logger.Trace("This is a trace message.")
logger.Debug("This is a debug message.")
logger.Info("Hello World!")
logger.Warn("This is a warnning message.")
logger.Error("This is an error message.")
}
package main
import (
"os"
"time"
"github.com/gofiddle/log"
)
func main() {
logger := log.New(log.NewAsyncLogWriter(os.Stdout, log.DEFAULT_QUEUE_SIZE), log.LOG_LEVEL_INFO)
logger.Trace("This is a trace message.")
logger.Debug("This is a debug message.")
logger.Info("Hello World!")
logger.Warn("This is a warnning message.")
logger.Error("This is an error message.")
// Wait for 3 seconds to let the writer finish writing logs
<-time.After(time.Second * 3)
}
By default, the logger will format the log message to something like this: "INFO: 2006-01-02T15:04:05 (UTC): log message...", you can customize the format by providing your own formatter after created the logger.
package main
import "github.com/gofiddle/log"
type MyLogFormatter struct {}
func (f *MyLogFormatter) Format(t time.Time, level int, message string) string {
... customize the message
return msg
}
func main() {
logger := log.New(NewAsyncLogWriter(os.Stdout), log.LOG_LEVEL_INFO)
logger.SetFormatter(&MyLogFormatter{})
logger.Trace("This is a trace message.")
logger.Debug("This is a debug message.")
logger.Info("Hello World!")
logger.Warn("This is a warnning message.")
logger.Error("This is an error message.")
}
- Tom Li nklizhe@gmail.com
Thanks Dave Cheney @davecheney and Xing Xing @mikespook help reviewing the code and giving me feedbacks!
MIT License