Documentation ¶
Overview ¶
Go Log is a simple to use logging library inspired by the standard `log` package.
It provides the: Debug, Info, Warn, Error, and Fatal log levels.
Go Log is easy to setup:
// logger will print normal messages to stdout and errors to stderr logger := golog.NewLogger("example")
The logging API should be familiar to those who have used the standard `fmt` and `log` packages.
logger.Debug("hello debug") logger.Debugf("hello %s", "debug") logger.Info("hello info") logger.Infof("hello %s", "info") logger.Warn("hello warn") logger.Warnf("hello %s", "warn") logger.Error("hello error") logger.Errorf("hello %s", "error") logger.Fatal("hello fatal") logger.Fatalf("hello %s", "fatal")
You can configure Go Log to only show messages of certain importance
logger.SetLevel(golog.DebugLevel) logger.SetLevel(golog.InfoLevel) logger.SetLevel(golog.WarnLevel) logger.SetLevel(golog.ErrorLevel) logger.SetLevel(golog.FatalLevel)
Log output format can be configured with Go templates
logger.SetFormatTmpl("name={{ .Name }} level={{ .Level }} msg={{ .Msg }}\n")
Child loggers can be created
child := logger.GetChild("child")
Example (Basic) ¶
Shows how to use Go Log with no customization.
package main import ( "github.com/Noah-Huppert/golog" ) func main() { // logger will print normal messages to stdout and errors to stderr logger := golog.NewLogger("basic-example") // Log messages for each log level logger.Debug("hello debug") logger.Debugf("hello %s", "debug") logger.Info("hello info") logger.Infof("hello %s", "info") logger.Warn("hello warn") logger.Warnf("hello %s", "warn") logger.Error("hello error") logger.Errorf("hello %s", "error") logger.Fatal("hello fatal") logger.Fatalf("hello %s", "fatal") }
Output: basic-example [DEBUG] hello debug basic-example [DEBUG] hello debug basic-example [INFO] hello info basic-example [INFO] hello info basic-example [WARN] hello warn basic-example [WARN] hello warn basic-example [ERROR] hello error basic-example [ERROR] hello error basic-example [FATAL] hello fatal basic-example [FATAL] hello fatal
Example (Child) ¶
Shows how to use the GetChild method
package main import ( "github.com/Noah-Huppert/golog" ) func main() { // logger will print normal messages to stdout and errors to stderr logger := golog.NewLogger("get-child-example") logger.SetLevel(golog.InfoLevel) // Log messages with the parent logger logger.Debug("hello debug") logger.Info("hello info") // Create a child logger child := logger.GetChild("child") // Log messages with the child logger child.Debug("hello debug") child.Info("hello info") }
Output: get-child-example [INFO] hello info get-child-example.child [INFO] hello info
Example (Format) ¶
Shows how to customize the log output format
package main import ( "github.com/Noah-Huppert/golog" ) func main() { // Configure logger with special format logger := golog.NewLogger("format-example") logger.SetFormatTmpl("name={{ .Name }} level={{ .Level }} msg={{ .Msg }}\n") // Log messages for each log level logger.Debug("hello debug") logger.Debugf("hello %s", "debug") logger.Info("hello info") logger.Infof("hello %s", "info") logger.Warn("hello warn") logger.Warnf("hello %s", "warn") logger.Error("hello error") logger.Errorf("hello %s", "error") logger.Fatal("hello fatal") logger.Fatalf("hello %s", "fatal") }
Output: name=format-example level=DEBUG msg=hello debug name=format-example level=DEBUG msg=hello debug name=format-example level=INFO msg=hello info name=format-example level=INFO msg=hello info name=format-example level=WARN msg=hello warn name=format-example level=WARN msg=hello warn name=format-example level=ERROR msg=hello error name=format-example level=ERROR msg=hello error name=format-example level=FATAL msg=hello fatal name=format-example level=FATAL msg=hello fatal
Example (Levels) ¶
Shows how to only display messages from certain log levels
package main import ( "github.com/Noah-Huppert/golog" ) func main() { // Configure logger to only display error messages or greater logger := golog.NewLogger("levels-example") logger.SetLevel(golog.ErrorLevel) // Log messages which will not be shown because they are below the // specified log level logger.Debug("I will not be shown b/c I am a debug message") logger.Info("I am just an info message show I will not be shown") logger.Warn("Due to the fact that I am a warn message I will not be displayed") // Log message that will show logger.Error("Error log messages will show") logger.Fatal("I am a fatal message so I will be displayed") }
Output: levels-example [ERROR] Error log messages will show levels-example [FATAL] I am a fatal message so I will be displayed
Index ¶
- Constants
- Variables
- func MustExecTmpl(t *template.Template, data interface{}) string
- func MustMkTmpl(tmpl string) *template.Template
- type BaseLogger
- type LogMsgCtx
- type Logger
- type WriterLogger
- func (l WriterLogger) Debug(data ...interface{})
- func (l WriterLogger) Debugf(format string, data ...interface{})
- func (l WriterLogger) Error(data ...interface{})
- func (l WriterLogger) Errorf(format string, data ...interface{})
- func (l WriterLogger) Fatal(data ...interface{})
- func (l WriterLogger) Fatalf(format string, data ...interface{})
- func (l WriterLogger) GetChild(child string) Logger
- func (l WriterLogger) Info(data ...interface{})
- func (l WriterLogger) Infof(format string, data ...interface{})
- func (l WriterLogger) Warn(data ...interface{})
- func (l WriterLogger) Warnf(format string, data ...interface{})
Examples ¶
Constants ¶
const DebugLevel int = 60
DebugLevel is used to identify the DEBUG log level and compare it to other levels
const DebugLevelName string = "DEBUG"
DebugLevelName is the name of the DEBUG log level
const DefaultLogFmt string = "{{ .Name }} [{{ .Level }}] {{ .Msg }}\n"
DefaultLogFmt is the default log format template
const ErrorLevel int = 90
ErrorLevel is used to identify the ERROR log level and compare it to other levels
const ErrorLevelName string = "ERROR"
ErrorLevelName is the name of the ERROR log level
const FatalLevel int = 100
FatalLevel is used to identify the FATAL log level and compare it to other levels
const FatalLevelName string = "FATAL"
FatalLevelName is the name of the FATAL log level
const InfoLevel int = 70
InfoLevel is used to identify the INFO log level and compare it to other levels
const InfoLevelName string = "INFO"
InfoLevelName is the name of the INFO log level
const WarnLevel int = 80
WarnLevel is used to identify the WARN log level and compare it to other levels
const WarnLevelName string = "WARN"
WarnLevelName is the name of the WARN log level
Variables ¶
var Levels map[int]string = map[int]string{ FatalLevel: FatalLevelName, ErrorLevel: ErrorLevelName, WarnLevel: WarnLevelName, InfoLevel: InfoLevelName, DebugLevel: DebugLevelName, }
Levels maps level priorities to level names
Functions ¶
func MustExecTmpl ¶
MustExecTmpl executes a Go template and returns the result. Panics if an error occurs.
func MustMkTmpl ¶
MustMkTmpl creates a Go template. Panics if an error occurs.
Types ¶
type BaseLogger ¶
type BaseLogger struct {
// contains filtered or unexported fields
}
BaseLogger formats and outputs log messages. It implements some of the basic functionality that all loggers must provide.
func NewBaseLogger ¶
func NewBaseLogger(name string) *BaseLogger
NewBaseLogger creates a new BaseLogger instance
func (*BaseLogger) SetFormatTmpl ¶
func (l *BaseLogger) SetFormatTmpl(tmpl string)
func (*BaseLogger) SetLevel ¶
func (l *BaseLogger) SetLevel(level int)
func (*BaseLogger) SetName ¶
func (l *BaseLogger) SetName(name string)
type LogMsgCtx ¶
type LogMsgCtx struct { // Name is the identifier of the logger Name string // Level is the name of the message log level Level string // Msg is the log message contents Msg string }
LogMsgCtx holds information about a log message
func NewLogMsgCtx ¶
NewLogMsgCtx creates a new LogMsgCtx
type Logger ¶
type Logger interface { // SetName sets the logger's identifying name SetName(name string) // SetLevel sets the minimum log level which will be outputted SetLevel(level int) // SetFormatTmpl defines a Go template used to format log output. // Fields from the LogMsgCtx struct are available to use in the // template. SetFormatTmpl(tmpl string) // GetChild creates a new logger who's name is the original logger's // name and the provided name combined GetChild(name string) Logger // Fatal writes at the FATAL level and panics the process Fatal(data ...interface{}) // Fatalf formats a string, writes at the FATAL level, and panics the // process Fatalf(format string, data ...interface{}) // Error writes at the ERROR level Error(data ...interface{}) // Errorf formats a string and writes at the ERROR level Errorf(format string, data ...interface{}) // Warn writes at the WARN level Warn(data ...interface{}) // Warnf formats a string and writes at the WARN level Warnf(format string, data ...interface{}) // Info writes at the INFO level Info(data ...interface{}) // Infof formats a string and writes at the INFO level Infof(format string, data ...interface{}) // Debug writes at the DEBUG level Debug(data ...interface{}) // Debugf formats a string and writes at the DEBUG level Debugf(format string, data ...interface{}) }
Logger defines methods for outputting information
type WriterLogger ¶
type WriterLogger struct { // BaseLogger is used to provide the basic functionality of a Logger *BaseLogger // FatalWriter is used to output FATAL level log messages FatalWriter io.Writer // ErrorWriter is used to output ERROR level log messages ErrorWriter io.Writer // WarnWriter is used to output WARN level log messages WarnWriter io.Writer // InfoWriter is used to output INFO level log messages InfoWriter io.Writer // DebugWriter is used to output DEBUG level log messages DebugWriter io.Writer }
WriterLogger implements the Logger interface using different io.Writers for the different log levels.
func NewLogger ¶
func NewLogger(name string) *WriterLogger
NewLogger creates a WriterLogger which outputs normal messages to stdout and error messages to stderr
func NewStdLogger ¶
func NewStdLogger(name string) *WriterLogger
NewStdLogger calls NewLogger, kept for compatibility
func NewWriterLogger ¶
func NewWriterLogger(name string, fatalWriter io.Writer, errorWriter io.Writer, warnWriter io.Writer, infoWriter io.Writer, debugWriter io.Writer) *WriterLogger
NewWriterLogger creates a new WriterLogger
func (WriterLogger) Debug ¶
func (l WriterLogger) Debug(data ...interface{})
func (WriterLogger) Debugf ¶
func (l WriterLogger) Debugf(format string, data ...interface{})
func (WriterLogger) Error ¶
func (l WriterLogger) Error(data ...interface{})
func (WriterLogger) Errorf ¶
func (l WriterLogger) Errorf(format string, data ...interface{})
func (WriterLogger) Fatal ¶
func (l WriterLogger) Fatal(data ...interface{})
func (WriterLogger) Fatalf ¶
func (l WriterLogger) Fatalf(format string, data ...interface{})
func (WriterLogger) GetChild ¶
func (l WriterLogger) GetChild(child string) Logger
GetChild implements Logger.GetChild
func (WriterLogger) Info ¶
func (l WriterLogger) Info(data ...interface{})
func (WriterLogger) Infof ¶
func (l WriterLogger) Infof(format string, data ...interface{})
func (WriterLogger) Warn ¶
func (l WriterLogger) Warn(data ...interface{})
func (WriterLogger) Warnf ¶
func (l WriterLogger) Warnf(format string, data ...interface{})