From 055b10405ea02fb7adb3867141dc56464fda9a90 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 18 Dec 2017 22:23:11 -0500 Subject: use contexts for logging --- nslcd_server/ctx.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'nslcd_server/ctx.go') diff --git a/nslcd_server/ctx.go b/nslcd_server/ctx.go index 5214adc..9722017 100644 --- a/nslcd_server/ctx.go +++ b/nslcd_server/ctx.go @@ -20,9 +20,26 @@ package nslcd_server import ( "context" + "git.lukeshu.com/go/libsystemd/sd_daemon" "golang.org/x/sys/unix" ) +// Logger is the common interface between +// `"git.lukeshu.com/go/libsystemd/sd_daemon".Logger` and +// `"log/syslog".Writer`. +type Logger interface { + Emerg(m string) error + Alert(m string) error + Crit(m string) error + Err(m string) error + Warning(m string) error + Notice(m string) error + Info(m string) error + Debug(m string) error + + Write(m []byte) (int, error) +} + // contextKey is a value for use with context.WithValue. It's used as // a pointer so it fits in an interface{} without allocation. type contextKey struct { @@ -35,6 +52,11 @@ var ( // The associated value will be of type // "golang.org/x/sys/unix".Ucred PeerCredKey = &contextKey{"peercred"} + + // LoggerKey is a context key. It can be used in the backend + // methods to access a logger. The associated value will be + // an implementation of Logger. + LoggerKey = &contextKey{"log"} ) // PeerCredFromContext is a convenience function for @@ -44,3 +66,11 @@ func PeerCredFromContext(ctx context.Context) (unix.Ucred, bool) { cred, ok := ctx.Value(PeerCredKey).(unix.Ucred) return cred, ok } + +func LoggerFromContext(ctx context.Context) Logger { + logger, ok := ctx.Value(LoggerKey).(Logger) + if !ok { + return sd_daemon.Log + } + return logger +} -- cgit v1.2.3