route/vendor/github.com/koding/logging/context.go

87 lines
2.6 KiB
Go
Raw Normal View History

2017-01-22 17:36:44 +00:00
package logging
import "fmt"
type context struct {
prefix string
logger
}
// Fatal is equivalent to Critical() followed by a call to os.Exit(1).
func (c *context) Fatal(format string, args ...interface{}) {
c.logger.Fatal(c.prefixFormat()+format, args...)
}
// Panic is equivalent to Critical() followed by a call to panic().
func (c *context) Panic(format string, args ...interface{}) {
c.logger.Panic(c.prefixFormat()+format, args...)
}
// Critical sends a critical level log message to the handler. Arguments are
// handled in the manner of fmt.Printf.
func (c *context) Critical(format string, args ...interface{}) {
c.logger.Critical(c.prefixFormat()+format, args...)
}
// Error sends a error level log message to the handler. Arguments are handled
// in the manner of fmt.Printf.
func (c *context) Error(format string, args ...interface{}) {
c.logger.Error(c.prefixFormat()+format, args...)
}
// Warning sends a warning level log message to the handler. Arguments are
// handled in the manner of fmt.Printf.
func (c *context) Warning(format string, args ...interface{}) {
c.logger.Warning(c.prefixFormat()+format, args...)
}
// Notice sends a notice level log message to the handler. Arguments are
// handled in the manner of fmt.Printf.
func (c *context) Notice(format string, args ...interface{}) {
c.logger.Notice(c.prefixFormat()+format, args...)
}
// Info sends a info level log message to the handler. Arguments are handled in
// the manner of fmt.Printf.
func (c *context) Info(format string, args ...interface{}) {
c.logger.Info(c.prefixFormat()+format, args...)
}
// Debug sends a debug level log message to the handler. Arguments are handled
// in the manner of fmt.Printf.
func (c *context) Debug(format string, args ...interface{}) {
c.logger.Debug(c.prefixFormat()+format, args...)
}
// New creates a new Logger from current context
func (c *context) New(prefixes ...interface{}) Logger {
return newContext(c.logger, c.prefix, prefixes...)
}
func (c *context) prefixFormat() string {
return c.prefix + " "
}
func newContext(logger logger, initial string, prefixes ...interface{}) *context {
resultPrefix := "" // resultPrefix holds prefix after initialization
connector := "" // connector holds the connector string
for _, prefix := range prefixes {
resultPrefix += fmt.Sprintf("%s%+v", connector, prefix)
switch connector {
case "=": // if previous is `=` replace with ][
connector = "]["
case "][": // if previous is `][` replace with =
connector = "="
default:
connector = "=" // if its first iteration, assing =
}
}
return &context{
prefix: initial + "[" + resultPrefix + "]",
logger: logger,
}
}