Created
May 30, 2017 06:10
-
-
Save ymgyt/263c3866495bb52d6843cf8cdadde0b3 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
func NewNotepad(outThreshold Threshold, logThreshold Threshold, outHandle, logHandle io.Writer, prefix string, flags int) *Notepad { | |
n := &Notepad{} | |
n.loggers = [7]**log.Logger{&n.TRACE, &n.DEBUG, &n.INFO, &n.WARN, &n.ERROR, &n.CRITICAL, &n.FATAL} | |
n.outHandle = outHandle | |
n.logHandle = logHandle | |
n.stdoutThreshold = outThreshold | |
n.logThreshold = logThreshold | |
if len(prefix) != 0 { | |
n.prefix = "[" + prefix + "] " | |
} else { | |
n.prefix = "" | |
} | |
n.flags = flags | |
n.LOG = log.New(n.logHandle, | |
"LOG: ", | |
n.flags) | |
n.FEEDBACK = &Feedback{out: log.New(outHandle, "", 0), log: n.LOG} | |
n.init() | |
return n | |
} | |
// init creates the loggers for each level depending on the notepad thresholds. | |
func (n *Notepad) init() { | |
logAndOut := io.MultiWriter(n.outHandle, n.logHandle) | |
for t, logger := range n.loggers { | |
threshold := Threshold(t) | |
counter := &logCounter{} | |
n.logCounters[t] = counter | |
prefix := n.prefix + threshold.String() + " " | |
switch { | |
case threshold >= n.logThreshold && threshold >= n.stdoutThreshold: | |
*logger = log.New(io.MultiWriter(counter, logAndOut), prefix, n.flags) | |
case threshold >= n.logThreshold: | |
*logger = log.New(io.MultiWriter(counter, n.logHandle), prefix, n.flags) | |
case threshold >= n.stdoutThreshold: | |
*logger = log.New(io.MultiWriter(counter, n.outHandle), prefix, n.flags) | |
default: | |
// counter doesn't care about prefix and flags, so don't use them | |
// for performance. | |
*logger = log.New(counter, "", 0) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment