-
-
Save jbenet/70ff524c460986eab6c3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// WARNING: this is probably wrong. i extracted it and deleted code for clarity | |
package eventlog | |
import ( | |
"strings" | |
logging "github.com/op/go-logging" | |
) | |
// StandardLogger provides API compatibility with standard printf loggers | |
// eg. go-logging | |
type StandardLogger interface { | |
Critical(args ...interface{}) | |
Criticalf(format string, args ...interface{}) | |
Debug(args ...interface{}) | |
Debugf(format string, args ...interface{}) | |
Error(args ...interface{}) | |
Errorf(format string, args ...interface{}) | |
Fatal(args ...interface{}) | |
Fatalf(format string, args ...interface{}) | |
Info(args ...interface{}) | |
Infof(format string, args ...interface{}) | |
Notice(args ...interface{}) | |
Noticef(format string, args ...interface{}) | |
Panic(args ...interface{}) | |
Panicf(format string, args ...interface{}) | |
Warning(args ...interface{}) | |
Warningf(format string, args ...interface{}) | |
} | |
// StandardLogger provides API compatibility with standard printf loggers | |
// eg. go-logging | |
type PrefixLogger interface { | |
StandardLogger | |
Format() string | |
Args() []interface{} | |
Prefix(fmt string, args ...interface{}) PrefixLogger | |
} | |
// Logger retrieves an event logger by name | |
func Logger(system string) PrefixLogger { | |
// TODO if we would like to adjust log levels at run-time. Store this event | |
// logger in a map (just like the util.Logger impl) | |
logger := util.Logger(system) | |
return Prefix(logger, "") | |
} | |
func Prefix(l StandardLogger, format string, args ...interface{}) PrefixLogger { | |
return &prefixLogger{logger: l, format: format, args: args} | |
} | |
type prefixLogger struct { | |
logger StandardLogger | |
format string | |
args []interface{} | |
} | |
func (pl *prefixLogger) Format() string { | |
return pl.format | |
} | |
func (pl *prefixLogger) Args() []interface{} { | |
return pl.args | |
} | |
func (pl *prefixLogger) Prefix(fmt string, args ...interface{}) PrefixLogger { | |
return Prefix(pl, fmt, args...) | |
} | |
func (pl *prefixLogger) prepend(fmt string, args []interface{}) (string, []interface{}) { | |
together := make([]interface{}, 0, len(pl.args)+len(args)) | |
together = append(together, pl.args...) | |
together = append(together, args...) | |
if len(pl.format) > 0 { | |
fmt = pl.format + " " + fmt | |
} | |
return fmt, together | |
} | |
func valfmtn(count int) string { | |
s := strings.Repeat("%v ", count) | |
s = s[:len(s)-1] // remove last space | |
return s | |
} | |
type logFunc func(args ...interface{}) | |
type logFuncf func(fmt string, args ...interface{}) | |
func (pl *prefixLogger) logFunc(f logFuncf, args ...interface{}) { | |
// need to actually use the format version, with extra fmt strings appended | |
fmt := valfmtn(len(args)) | |
pl.logFuncf(f, fmt, args...) | |
} | |
func (pl *prefixLogger) logFuncf(f logFuncf, format string, args ...interface{}) { | |
format, args = pl.prepend(format, args) | |
f(format, args...) | |
} | |
func (pl *prefixLogger) Critical(args ...interface{}) { | |
pl.logFunc(pl.logger.Criticalf, args...) | |
} | |
func (pl *prefixLogger) Debug(args ...interface{}) { | |
pl.logFunc(pl.logger.Debugf, args...) | |
} | |
func (pl *prefixLogger) Error(args ...interface{}) { | |
pl.logFunc(pl.logger.Errorf, args...) | |
} | |
func (pl *prefixLogger) Fatal(args ...interface{}) { | |
pl.logFunc(pl.logger.Fatalf, args...) | |
} | |
func (pl *prefixLogger) Info(args ...interface{}) { | |
pl.logFunc(pl.logger.Infof, args...) | |
} | |
func (pl *prefixLogger) Notice(args ...interface{}) { | |
pl.logFunc(pl.logger.Noticef, args...) | |
} | |
func (pl *prefixLogger) Panic(args ...interface{}) { | |
pl.logFunc(pl.logger.Panicf, args...) | |
} | |
func (pl *prefixLogger) Warning(args ...interface{}) { | |
pl.logFunc(pl.logger.Warningf, args...) | |
} | |
func (pl *prefixLogger) Criticalf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Criticalf, format, args...) | |
} | |
func (pl *prefixLogger) Debugf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Debugf, format, args...) | |
} | |
func (pl *prefixLogger) Errorf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Errorf, format, args...) | |
} | |
func (pl *prefixLogger) Fatalf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Fatalf, format, args...) | |
} | |
func (pl *prefixLogger) Infof(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Infof, format, args...) | |
} | |
func (pl *prefixLogger) Noticef(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Noticef, format, args...) | |
} | |
func (pl *prefixLogger) Panicf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Panicf, format, args...) | |
} | |
func (pl *prefixLogger) Warningf(format string, args ...interface{}) { | |
pl.logFuncf(pl.logger.Warningf, format, args...) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment