You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.8 KiB

go-log

GoDoc Build Status Coverage Status Go Report Card License

Logging package similar to log4j for the Golang.

  • Support dynamic log level
  • Support customized formatter
    • TextFormatter
    • JSONFormatter
  • Support multiple rolling file writers
    • FixedSizeFileWriter
    • DailyFileWriter
    • AlwaysNewFileWriter

Installation

$ go get github.com/subchen/go-log

Usage

package main

import (
    "os"
    "errors"
    "github.com/subchen/go-log"
)

func main() {
    log.Debugf("app = %s", os.Args[0])
    log.Errorf("error = %v", errors.New("some error"))

    // dynamic set level
    log.Default.Level = log.DEBUG

    log.Debug("cannot output debug message")
    log.Infoln("can output info message")
}

Output

Default log to console, you can set Logger.Out to set a file writer into log.

import (
    "github.com/subchen/go-log"
    "github.com/subchen/go-log/writers"
)

log.Default.Out = &writers.FixedSizeFileWriter{
    Name:     "/tmp/test.log",
    MaxSize:  10 * 1024 * 1024, // 10m
    MaxCount: 10,
})

Three builtin writers for use

// Create log file if file size large than fixed size (10m)
// files: /tmp/test.log.0 .. test.log.10
&writers.FixedSizeFileWriter{
    Name:     "/tmp/test.log",
    MaxSize:  10 * 1024 * 1024, // 10m
    MaxCount: 10,
}

// Create log file every day.
// files: /tmp/test.log.20160102
&writers.DailyFileWriter{
    Name: "/tmp/test.log",
    MaxCount: 10,
}

// Create log file every process.
// files: /tmp/test.log.20160102_150405
&writers.AlwaysNewFileWriter{
    Name: "/tmp/test.log",
    MaxCount: 10,
}

// Output to multiple writes
io.MultiWriter(
    os.Stdout,
    &writers.DailyFileWriter{
        Name: "/tmp/test.log",
        MaxCount: 10,
    }
    //...
)

Formatter

import (
    "github.com/subchen/go-log"
    "github.com/subchen/go-log/formatters"
)

log.Default.Formatter = new(formatters.TextFormatter)

New Logger instance

import (
    "github.com/subchen/go-log"
)

func main() {
    logger := &log.Logger{
		Level:     log.INFO,
		Formatter: new(formatters.JSONFormatter),
		Out:       os.Stdout,
	}

    logger.Infof("i = %d", 99)
}

LICENSE

Apache 2.0