87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
|
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,
|
||
|
}
|
||
|
|
||
|
}
|