diff --git a/logger.go b/logger.go index b4efcc0..c0400e3 100644 --- a/logger.go +++ b/logger.go @@ -1,6 +1,7 @@ package cron import ( + "io" "io/ioutil" "log" "os" @@ -56,6 +57,33 @@ func (pl printfLogger) Error(err error, msg string, keysAndValues ...interface{} append([]interface{}{msg, "error", err}, keysAndValues...)...) } +type externalLogger struct { + logger *log.Logger +} + +// NewExternalLogger allows for providing an external logging interface through an io.Writer +func NewExternalLogger(w io.Writer) *externalLogger { + l := log.New(w, "cron: ", log.Llongfile) + + el := externalLogger{ + logger: l, + } + + return &el +} + +func (el *externalLogger) Info(msg string, keysAndValues ...interface{}) { + el.logger.Printf( + formatString(len(keysAndValues)), + append([]interface{}{msg}, keysAndValues...)...) +} + +func (el *externalLogger) Error(err error, msg string, keysAndValues ...interface{}) { + el.logger.Printf( + formatString(len(keysAndValues)+2), + append([]interface{}{msg, "error", err}, keysAndValues...)...) +} + // formatString returns a logfmt-like format string for the number of // key/values. func formatString(numKeysAndValues int) string {