If you have any feature requests, please feel free to create an issue. We're looking forward to communicate with you!
cloudlog provides structured loggging in Go.
We recommend to use cloudlog with GCP, support
- Cloud Logging(Stackdriver Logging) display log level, structured logging, etc...
- Error Reporting
format.
you can use logging features immediately when you only need default log config.
It uses zap internal.
$ go get -u github.com/ishihaya/cloudlog
You can define methods that you only use in Log
interface.
package log
import (
"os"
"sync"
"github.com/ishihaya/cloudlog"
)
// You can define methods that you only use.
type Log interface {
Debugf(template string, args ...interface{})
Infof(template string, args ...interface{})
Warnf(template string, args ...interface{})
Errorf(template string, args ...interface{})
Fatalf(template string, args ...interface{})
Debugw(msg string, keysAndValues ...interface{})
Infow(msg string, keysAndValues ...interface{})
Warnw(msg string, keysAndValues ...interface{})
Errorw(msg string, keysAndValues ...interface{})
Fatalw(msg string, keysAndValues ...interface{})
}
type log struct {
*cloudlog.Logger
}
var sharedInstance Log
var once sync.Once
// You should call this if you use logger.
func GetInstance() Log {
once.Do(func() {
sharedInstance = new()
})
return sharedInstance
}
func new() Log {
var logger *cloudlog.Logger
var err error
// serviceName is displayed in Error Reporting.
serviceName := "backend-api"
switch os.Getenv("APP_ENV") {
// List runnning environments on cloud, such as GCP.
case "production", "staging":
logger, err = cloudlog.NewCloudLogger(
cloudlog.NeedErrorReporting(true),
cloudlog.ServiceName(serviceName),
)
default:
logger, err = cloudlog.NewLocalLogger()
}
if err != nil {
panic(err)
}
return &log{logger}
}