106 lines
2.3 KiB
Go
106 lines
2.3 KiB
Go
package log
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// logger is just an index into the loggers pool.
|
|
type logger int
|
|
|
|
const DefaultLogger logger = 0
|
|
|
|
// loggers is the pool of available loggers. The first entry always is empty,
|
|
// describing the default logger.
|
|
//var loggers []string = make([]string, 1, 10)
|
|
//var levels []level = make([]level, 1, 10)
|
|
//var targets []io.Writer = make([]io.Writer, 1, 10)
|
|
|
|
type loggerData struct {
|
|
name string
|
|
level level
|
|
target io.Writer
|
|
format Formatter
|
|
autotrace level
|
|
}
|
|
|
|
var loggers []loggerData = make([]loggerData, 1, 10)
|
|
|
|
func init() {
|
|
DefaultLogger.
|
|
SetLevel(INFO).
|
|
SetTarget(os.Stdout).
|
|
SetFormatter(&PlainFormatter{}).
|
|
SetAutotrace(DEBUG)
|
|
}
|
|
|
|
// Logger returns a logger with the given name. If there is no logger with this
|
|
// name, a new one will be created.
|
|
func Logger(name string) logger {
|
|
for i, v := range loggers {
|
|
if v.name == name {
|
|
return logger(i)
|
|
}
|
|
}
|
|
loggers = append(loggers, loggerData{
|
|
name: name,
|
|
level: INFO,
|
|
target: os.Stdout,
|
|
format: &PlainFormatter{},
|
|
})
|
|
return logger(len(loggers) - 1)
|
|
}
|
|
|
|
// Level returns the log level this logger is set to.
|
|
func (l logger) Level() level {
|
|
return loggers[l].level
|
|
}
|
|
|
|
// SetLevel sets the log level for this logger. Returns the logger, which enables chaining during initialization.
|
|
func (l logger) SetLevel(lvl level) logger {
|
|
loggers[l].level = lvl
|
|
return l
|
|
}
|
|
|
|
func (l logger) Target() io.Writer {
|
|
return loggers[l].target
|
|
}
|
|
|
|
// SetTarget sets the logging target. Returns the logger, which enables chaining during initialization.
|
|
func (l logger) SetTarget(t io.Writer) logger {
|
|
loggers[l].target = t
|
|
return l
|
|
}
|
|
|
|
func (l logger) Formatter() Formatter {
|
|
return loggers[l].format
|
|
}
|
|
|
|
func (l logger) SetFormatter(f Formatter) logger {
|
|
loggers[l].format = f
|
|
return l
|
|
}
|
|
|
|
func (l logger) Autotrace() level {
|
|
return loggers[l].autotrace
|
|
}
|
|
|
|
// SetAutotrace sets the level to send the stack trace to in case an error is logged. (which is a
|
|
// log message with an error attached to it).
|
|
func (l logger) SetAutotrace(lvl level) logger {
|
|
loggers[l].autotrace = lvl
|
|
return l
|
|
}
|
|
|
|
func (l logger) String() string {
|
|
return loggers[l].name
|
|
}
|
|
|
|
// Configure parses a config string, enabling the configuration of multiple loggers at once.
|
|
// [logger:]level[@target][#format]
|
|
// target may be a file name
|
|
func Configure(config string) error {
|
|
|
|
return nil
|
|
}
|