mirror of
https://github.com/edouardparis/lntop
synced 2024-11-08 01:10:32 +00:00
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
|
// Copyright 2016 Canonical Ltd.
|
||
|
// Licensed under the LGPLv3, see LICENCE file for details.
|
||
|
|
||
|
package loggo
|
||
|
|
||
|
// Do not change rootName: modules.resolve() will misbehave if it isn't "".
|
||
|
const (
|
||
|
rootString = "<root>"
|
||
|
defaultRootLevel = WARNING
|
||
|
defaultLevel = UNSPECIFIED
|
||
|
)
|
||
|
|
||
|
type module struct {
|
||
|
name string
|
||
|
level Level
|
||
|
parent *module
|
||
|
context *Context
|
||
|
}
|
||
|
|
||
|
// Name returns the module's name.
|
||
|
func (module *module) Name() string {
|
||
|
if module.name == "" {
|
||
|
return rootString
|
||
|
}
|
||
|
return module.name
|
||
|
}
|
||
|
|
||
|
func (m *module) willWrite(level Level) bool {
|
||
|
if level < TRACE || level > CRITICAL {
|
||
|
return false
|
||
|
}
|
||
|
return level >= m.getEffectiveLogLevel()
|
||
|
}
|
||
|
|
||
|
func (module *module) getEffectiveLogLevel() Level {
|
||
|
// Note: the root module is guaranteed to have a
|
||
|
// specified logging level, so acts as a suitable sentinel
|
||
|
// for this loop.
|
||
|
for {
|
||
|
if level := module.level.get(); level != UNSPECIFIED {
|
||
|
return level
|
||
|
}
|
||
|
module = module.parent
|
||
|
}
|
||
|
panic("unreachable")
|
||
|
}
|
||
|
|
||
|
// setLevel sets the severity level of the given module.
|
||
|
// The root module cannot be set to UNSPECIFIED level.
|
||
|
func (module *module) setLevel(level Level) {
|
||
|
// The root module can't be unspecified.
|
||
|
if module.name == "" && level == UNSPECIFIED {
|
||
|
level = WARNING
|
||
|
}
|
||
|
module.level.set(level)
|
||
|
}
|
||
|
|
||
|
func (m *module) write(entry Entry) {
|
||
|
entry.Module = m.name
|
||
|
m.context.write(entry)
|
||
|
}
|