gcp/logger/logger.go (98 lines of code) (raw):

package logger import ( "bytes" "encoding/json" "fmt" "log" "os" "time" ) func New() *log.Logger { return log.New(os.Stderr, "", 0) } type Severity int const ( Default Severity = 0 Debug Severity = 100 Info Severity = 200 Notice Severity = 300 Warning Severity = 400 Error Severity = 500 Critical Severity = 600 Alert Severity = 700 Emergency Severity = 800 ) var SeverityMap = map[Severity]string{ Default: "DEFAULT", Debug: "DEBUG", Info: "INFO", Notice: "NOTICE", Warning: "WARNING", Error: "ERROR", Critical: "CRITICAL", Alert: "ALERT", Emergency: "EMERGENCY", } func (s Severity) String() string { return SeverityMap[s] } type CxEntry struct { Message string `json:"message"` Severity Severity `json:"severity,omitempty"` Trace string `json:"logging.googleapis.com/trace,omitempty"` Component string `json:"component,omitempty"` Time time.Time `json:"time,omitempty"` } func (e CxEntry) String() string { var buf bytes.Buffer enc := json.NewEncoder(&buf) enc.SetIndent("", " ") e.Time = time.Now() err := enc.Encode(e) if err != nil { panic(err) } return buf.String() } func CxEntryListenAndServe(addr string) *CxEntry { return &CxEntry{ Severity: Notice, Message: fmt.Sprintf("ListenAndServe: ezcx listening and serving on %s", addr), Component: "ezcx.Server", } } func CxEntryContextDone() *CxEntry { return &CxEntry{ Severity: Notice, Message: "ListenAndServe: ezcx server context is done", Component: "ezcx.Server", } } func CxEntryContextError(err error) *CxEntry { return &CxEntry{ Severity: Error, Message: fmt.Sprintf("ListenAndServe: ezcx server context error: %s", err), Component: "ezcx.Server", } } func CxEntryServerError(err error) *CxEntry { return &CxEntry{ Severity: Critical, Message: fmt.Sprintf("ListenAndServe: ezcx server processed a non-nil error: %s", err), Component: "ezcx.Server", } } func CxEntrySignalIntercepted(sig os.Signal) *CxEntry { return &CxEntry{ Severity: Notice, Message: fmt.Sprintf("ListenAndServe: ezcx server intercepted the %s signal", sig), Component: "ezcx.Server", } } func CxEntryGracefulShutdown() *CxEntry { return &CxEntry{ Severity: Notice, Message: "ListenAndServe: ezcx server was gracefully shutdown", Component: "ezcx.Server", } }