How to implement level based logging in golang?

前端 未结 11 1911
谎友^
谎友^ 2020-12-24 04:44

Is there any good wrapper available for level based logging in golang? If not, how should I go about implementing one myself?

What I want is pretty simple. I want a

相关标签:
11条回答
  • 2020-12-24 05:14

    stdlog fits exactly your requirements:

    log := stdlog.GetFromFlags()
    log.Info("Connecting to the server...")
    log.Errorf("Connection failed: %q", err)
    
    0 讨论(0)
  • 2020-12-24 05:15

    One of the logging module that you can consider is klog . It support 'V' logging which gives the flexibility to log at certain level

    klog is a fork of glog and overcomes following drawbacks

    glog presents a lot "gotchas" and introduces challenges in containerized environments, all of which aren't well documented. glog doesn't provide an easy way to test logs, which detracts from the stability of software using it glog is C++ based and klog is a pure golang implementation

    Sample Implementation

    package main
    
    import (
        "flag"
    
        "k8s.io/klog"
    
    
    )
    
    type myError struct {
        str string
    }
    
    func (e myError) Error() string {
        return e.str
    }
    
    func main() {
        klog.InitFlags(nil)
        flag.Set("v", "1")
        flag.Parse()
    
        klog.Info("hello", "val1", 1, "val2", map[string]int{"k": 1})
        klog.V(3).Info("nice to meet you")
        klog.Error(nil, "uh oh", "trouble", true, "reasons", []float64{0.1, 0.11, 3.14})
        klog.Error(myError{"an error occurred"}, "goodbye", "code", -1)
        klog.Flush()
    }
    
    0 讨论(0)
  • 2020-12-24 05:16

    I have added logging level support to the built-in Go log package. You can find my code here:

    https://github.com/gologme/log

    In addition to adding support for Info, Warn, and Debug, users can also define their own arbitrary logging levels. Logging levels are enabled and disabled individually. This means you can turn on Debug logs without also getting everything else.

    0 讨论(0)
  • 2020-12-24 05:17

    Take a look at http://cgl.tideland.biz and there at the package "applog". It's working that way.

    PS: The whole CGL is currently reworked and will soon be released with new features, but under a different name. ;)

    0 讨论(0)
  • 2020-12-24 05:19

    Some more suggestions, now that the existing answers are quite old:

    • https://github.com/op/go-logging - smaller than the other here
    • https://github.com/sirupsen/logrus - used in many popular projects such as Docker
    • https://github.com/inconshreveable/log15
    • https://github.com/golang/glog - from Google, implementation of their C++ glog library in Go
    • https://github.com/go-kit/kit/tree/master/log focused on "structured logging" which is better for tools to consume
    • https://github.com/uber-go/zap - "blazing fast"
    0 讨论(0)
  • 2020-12-24 05:23
    • Uber-go/Zap: Fast, structured, leveled logging in Go
    • Logrus: Structured, pluggable logging for Go. (JSON and text formatting)

    Both libraries have level hooks also, which is a very interesting feature. Hooks can be registered for particular log levels. So for example any error(logged using log.Error()) occurs you can report to some monitoring tool etc.

    0 讨论(0)
提交回复
热议问题