1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-18 14:47:03 +00:00
Files
go-chasquid-smtp/internal/trace/trace.go
Alberto Bertogli 60a7932bd3 log: Replace glog with a new logging module
glog works fine and has great features, but it does not play along well
with systemd or standard log rotators (as it does the rotation itself).

So this patch replaces glog with a new logging module "log", which by
default logs to stderr, in a systemd-friendly manner.

Logging to files or syslog is still supported.
2016-11-01 23:56:04 +00:00

110 lines
2.3 KiB
Go

// Package trace extends golang.org/x/net/trace.
package trace
import (
"fmt"
"strconv"
"blitiri.com.ar/go/chasquid/internal/log"
nettrace "golang.org/x/net/trace"
)
type Trace struct {
family string
title string
t nettrace.Trace
}
func New(family, title string) *Trace {
t := &Trace{family, title, nettrace.New(family, title)}
// The default for max events is 10, which is a bit short for a normal
// SMTP exchange. Expand it to 30 which should be large enough to keep
// most of the traces.
t.t.SetMaxEvents(30)
return t
}
func (t *Trace) Printf(format string, a ...interface{}) {
t.t.LazyPrintf(format, a...)
log.Log(log.Info, 1, "%s %s: %s", t.family, t.title,
quote(fmt.Sprintf(format, a...)))
}
func (t *Trace) Debugf(format string, a ...interface{}) {
t.t.LazyPrintf(format, a...)
log.Log(log.Debug, 1, "%s %s: %s",
t.family, t.title, quote(fmt.Sprintf(format, a...)))
}
func (t *Trace) SetError() {
t.t.SetError()
}
func (t *Trace) Errorf(format string, a ...interface{}) error {
// Note we can't just call t.Error here, as it breaks caller logging.
err := fmt.Errorf(format, a...)
t.t.SetError()
t.t.LazyPrintf("error: %v", err)
log.Log(log.Info, 1, "%s %s: error: %s", t.family, t.title,
quote(err.Error()))
return err
}
func (t *Trace) Error(err error) error {
t.t.SetError()
t.t.LazyPrintf("error: %v", err)
log.Log(log.Info, 1, "%s %s: error: %s", t.family, t.title,
quote(err.Error()))
return err
}
func (t *Trace) Finish() {
t.t.Finish()
}
type EventLog struct {
family string
title string
e nettrace.EventLog
}
func NewEventLog(family, title string) *EventLog {
return &EventLog{family, title, nettrace.NewEventLog(family, title)}
}
func (e *EventLog) Printf(format string, a ...interface{}) {
e.e.Printf(format, a...)
log.Log(log.Info, 1, "%s %s: %s", e.family, e.title,
quote(fmt.Sprintf(format, a...)))
}
func (e *EventLog) Debugf(format string, a ...interface{}) {
e.e.Printf(format, a...)
log.Log(log.Debug, 1, "%s %s: %s", e.family, e.title,
quote(fmt.Sprintf(format, a...)))
}
func (e *EventLog) Errorf(format string, a ...interface{}) error {
err := fmt.Errorf(format, a...)
e.e.Errorf("error: %v", err)
log.Log(log.Info, 1, "%s %s: error: %s",
e.family, e.title, quote(err.Error()))
return err
}
func quote(s string) string {
qs := strconv.Quote(s)
return qs[1 : len(qs)-1]
}