summaryrefslogtreecommitdiff
path: root/nslcd_server/ctx.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 22:23:11 -0500
committerLuke Shumaker <lukeshu@lukeshu.com>2017-12-18 23:07:56 -0500
commit055b10405ea02fb7adb3867141dc56464fda9a90 (patch)
tree88c3ca0cea58541d5915a921265021405ff0a1c5 /nslcd_server/ctx.go
parent379e4d7e4d2539f35d559d4b0752531e546238a9 (diff)
use contexts for logging
Diffstat (limited to 'nslcd_server/ctx.go')
-rw-r--r--nslcd_server/ctx.go30
1 files changed, 30 insertions, 0 deletions
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
+}