summaryrefslogtreecommitdiff
path: root/flags.go
diff options
context:
space:
mode:
Diffstat (limited to 'flags.go')
-rw-r--r--flags.go159
1 files changed, 99 insertions, 60 deletions
diff --git a/flags.go b/flags.go
index 4fe5516..45d57bd 100644
--- a/flags.go
+++ b/flags.go
@@ -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
}