diff options
Diffstat (limited to 'flags.go')
| -rw-r--r-- | flags.go | 159 |
1 files changed, 99 insertions, 60 deletions
@@ -1,17 +1,22 @@ package log +/* + Handles the on/off flags for things like log.Info() and log.Warn() +*/ + import ( - "errors" + "sync" ) -var INFO bool = true -var WARN bool = true -var ERROR bool = true - -var VERBOSE bool = false -// var SPEW bool = false - +var INFO LogFlag +var VERBOSE LogFlag var SPEW LogFlag +var WARN LogFlag +var ERROR LogFlag +var PRINTLN LogFlag + +// writeMutex protects locks the write process +var flagsMutex sync.Mutex type LogFlag struct { B bool @@ -20,90 +25,124 @@ type LogFlag struct { Desc string } -var registered map[string][]string var flags []*LogFlag func init() { - registered = make(map[string][]string) + INFO.B = false + INFO.Name = "INFO" + INFO.Subsystem = "log" + INFO.Desc = "Enable log.Info()" + INFO.Register() SPEW.B = false SPEW.Name = "SPEW" SPEW.Subsystem = "log" SPEW.Desc = "Enable log.Spew()" + SPEW.Register() + + VERBOSE.B = false + VERBOSE.Name = "VERBOSE" + VERBOSE.Subsystem = "log" + VERBOSE.Desc = "Enable log.Verbose()" + VERBOSE.Register() + + WARN.B = true + WARN.Name = "WARN" + WARN.Subsystem = "log" + WARN.Desc = "Enable log.Warn()" + WARN.Register() - // register the default flags used by this log package - registered["log"] = []string{"SPEW","INFO", "WARN", "ERROR", "VERBOSE"} + ERROR.B = true + ERROR.Name = "ERROR" + ERROR.Subsystem = "log" + ERROR.Desc = "Enable log.Error()" + ERROR.Register() + + PRINTLN.B = true + PRINTLN.Name = "PRINTLN" + PRINTLN.Subsystem = "log" + PRINTLN.Desc = "Enable log.Println()" + PRINTLN.Register() } -func All(b bool) { - Set("SPEW", b) - Set("INFO", b) - Set("WARN", b) - Set("ERROR", b) - Set("VERBOSE", b) +// set all the flags +func SetAll(b bool) { + flagsMutex.Lock() + defer flagsMutex.Unlock() for _, f := range flags { - Warn("All() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) f.B = b - Warn("All() f.B is now", f.B) } } + // this bypasses all checks and _always_ logs the info to STDOUT // is this a bad idea? Probably not.... -func ListFlags() map[string][]string { - Log(true, "ListFlags() registered =", registered) +// TODO: returning []*LogFlag is not safe and access must be locked +// but this is only used by the log debugging window at this time +func ShowFlags() []*LogFlag { + flagsMutex.Lock() + defer flagsMutex.Unlock() for _, f := range flags { - Log(true, "ListFlags() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) + Log(true, "ShowFlags() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) } - return registered + return flags } -func Set(flag string, b bool) { - switch flag { - case "INFO": - INFO = b - case "WARN": - WARN = b - case "SPEW": - SPEW.B = b - case "ERROR": - ERROR = b - case "VERBOSE": - VERBOSE = b - default: - Error(errors.New("unknown flag"), "Flag name sent:", flag) +// TODO, switch to this +func ProcessFlags(callback func(*LogFlag)) { + flagsMutex.Lock() + defer flagsMutex.Unlock() + for _, f := range flags { + Log(true, "ProcessFlags() run callback(f) here on", f) + callback(f) } -} -func Get(flag string) bool { - switch flag { - case "INFO": - return INFO - case "WARN": - return WARN - case "SPEW": - return SPEW.B - case "ERROR": - return ERROR - case "VERBOSE": - return VERBOSE - default: - Error(errors.New("unknown flag"), "Flag name sent:", flag) - } - return false } + // register a variable name from a subsystem // inspired by Alex Flint func (f *LogFlag) Register() { + flagsMutex.Lock() + defer flagsMutex.Unlock() Info("log.Register() ", f) flags = append(flags,f) } -// register a variable name from a subsystem -// this is used for custom log flags -func Register(subsystem string, name string, b *bool) { - Info("log.Register() got subsystem", subsystem, "with name =", name, "bool value =", b) - registered[subsystem] = append(registered[subsystem], name) +func (f *LogFlag) Set(b bool) { + flagsMutex.Lock() + defer flagsMutex.Unlock() + Info("Set() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) + f.B = b + Info("Set() f.B is now", f.B) +} + +func Set(subsystem string, name string, b bool) { + flagsMutex.Lock() + defer flagsMutex.Unlock() + Info("Set() TODO find var:", "(" + subsystem + ")", name, "=", b) + for _, f := range flags { + Log(true, "Set() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) + if (subsystem == f.Subsystem) && (name == f.Name) { + Log(true, "Set() FOUND ", f) + f.B = b + return + } + } + +} + +func Get(subsystem string, name string) bool { + flagsMutex.Lock() + defer flagsMutex.Unlock() + Info("Get() TODO find var:", "(" + subsystem + ")", name) + for _, f := range flags { + Log(true, "Get() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) + if (subsystem == f.Subsystem) && (name == f.Name) { + Log(true, "Get() FOUND ", f) + return f.B + } + } + return false } |
