Skip to content

ishihaya/cloudlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cloudlog

GitHub tag (latest SemVer) GoDoc

Comments

If you have any feature requests, please feel free to create an issue. We're looking forward to communicate with you!

Summary

cloudlog provides structured loggging in Go.

We recommend to use cloudlog with GCP, support

format.

you can use logging features immediately when you only need default log config.

It uses zap internal.

Installation

$ go get -u github.com/ishihaya/cloudlog

Usage

You can define methods that you only use in Log interface.

logging methods list

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}
}