summaryrefslogtreecommitdiff
path: root/flags.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-01-09 15:50:53 -0600
committerJeff Carr <[email protected]>2024-01-09 15:50:53 -0600
commit4f8752d9f4e210c48006217f059658049f6d682e (patch)
tree77887c4e84bfb247e9c0c4105f4cc5d138255ce6 /flags.go
parent6749a1d173e838b67967322ffdf1afb49be49fbc (diff)
go.wit.com/log flag changes
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'flags.go')
-rw-r--r--flags.go179
1 files changed, 114 insertions, 65 deletions
diff --git a/flags.go b/flags.go
index 9a54a81..49cdc28 100644
--- a/flags.go
+++ b/flags.go
@@ -4,85 +4,102 @@ package log
Handles the on/off flags for things like log.Info() and log.Warn()
*/
+/*
+ The original log flags:
+
+ log.Ldate: The date in the local time zone: YYYY/MM/DD.
+ log.Ltime: The time in the local time zone: HH:MM:SS.
+ log.Lmicroseconds: Microsecond resolution: HH:MM:SS.microseconds.
+ log.Llongfile: Full file name and line number: /a/b/c/d.go:23.
+ log.Lshortfile: Final file name element and line number: d.go:23.
+ log.LUTC: If Ldate or Ltime is set, use UTC rather than the local time zone.
+ log.Lmsgprefix: Move the "prefix" from the beginning of the line to before the message.
+ log.LstdFlags: Initial values for the standard logger (Ldate | Ltime).
+
+ can be set this way:
+ myLogger.SetFlags(log.Ldate | log.Ltime)
+
+*/
+
+
+
import (
"sync"
)
-var INFO LogFlag
-var VERBOSE LogFlag
-var SPEW LogFlag
-var WARN LogFlag
-var ERROR LogFlag
-var PRINTLN LogFlag
+var INFO *LogFlag // toggles log.Info()
+var VERBOSE *LogFlag // toggles log.Verbose()
+var SPEW *LogFlag // toggles log.Spew()
+
+var WARN *LogFlag // toggles log.Warn() (true by default)
+var ERROR *LogFlag // toggles log.Warn() (true by default)
+var PRINTLN *LogFlag // toggles log.Println() (true by default)
+
+var always *LogFlag
// writeMutex protects locks the write process
var flagsMutex sync.Mutex
type LogFlag struct {
- B bool
- Default bool // set at the time of Registration()
- Name string
+ b bool
+ orig bool // used as the Default value. set at the time of Registration()
+ name string
// TODO: figure out what package is sending the Registration
- Subsystem string // probably should just be forced to be the package name
- Short string // string actually printed on each line
- Desc string
+ subsystem string // probably should just be forced to be the package name
+ short string // string actually printed on each line
+ desc string
}
var flags []*LogFlag
func init() {
- INFO.B = false
- INFO.Name = "INFO"
- INFO.Subsystem = "log"
- INFO.Desc = "Enable log.Info()"
- INFO.Register()
+ full := "go.wit.com/log"
+ short := "log"
- SPEW.B = false
- SPEW.Name = "SPEW"
- SPEW.Subsystem = "log"
- SPEW.Desc = "Enable log.Spew()"
- SPEW.Register()
+ INFO = NewFlag("INFO", false, full, short, "Enable log.Info()")
+ SPEW = NewFlag("SPEW", false, full, short, "Enable log.Spew()")
+ WARN = NewFlag("WARN", true, full, short, "Enable log.Warn()")
- VERBOSE.B = false
- VERBOSE.Name = "VERBOSE"
- VERBOSE.Subsystem = "log"
- VERBOSE.Desc = "Enable log.Verbose()"
- VERBOSE.Register()
+ ERROR = NewFlag("ERROR", true, full, short, "Enable log.Error()")
+ PRINTLN = NewFlag("PRINTLN", true, full, short, "Enable log.Println()")
+ VERBOSE = NewFlag("VERBOSE", false, full, short, "Enable log.Verbose()")
- WARN.B = true
- WARN.Name = "WARN"
- WARN.Subsystem = "log"
- WARN.Desc = "Enable log.Warn()"
- WARN.Register()
-
- ERROR.B = true
- ERROR.Name = "ERROR"
- ERROR.Subsystem = "log"
- ERROR.Desc = "Enable log.Error()"
- ERROR.Register()
+ // internally used to bypass the possibility that all the flags are off
+ always = new(LogFlag)
+ always.b = true
+ always.orig = true
+ always.subsystem = full
+ always.short = short
+ always.desc = "internal only"
+}
- PRINTLN.B = true
- PRINTLN.Name = "PRINTLN"
- PRINTLN.Subsystem = "log"
- PRINTLN.Desc = "Enable log.Println()"
- PRINTLN.Register()
+// restores flag to it's default value
+func (f *LogFlag) SetDefault() {
+ if ! f.Ok() {return}
+ f.b = f.orig
}
// set all the flags
-func SetAll(b bool) {
+func SetDefaults() {
flagsMutex.Lock()
defer flagsMutex.Unlock()
for _, f := range flags {
- f.B = b
+ f.SetDefault()
}
}
+// protects against panic() by making sure it exists.
+func (f *LogFlag) Ok() bool {
+ if f == nil {return false}
+ return true
+}
+
// set all the flags
-func SetDefaults() {
+func SetAll(b bool) {
flagsMutex.Lock()
defer flagsMutex.Unlock()
for _, f := range flags {
- f.B = f.Default
+ f.b = b
}
}
@@ -94,55 +111,86 @@ func ShowFlags() []*LogFlag {
flagsMutex.Lock()
defer flagsMutex.Unlock()
for _, f := range flags {
- Log(true, "ShowFlags() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc)
+ Log(always, "ShowFlags() ", "(" + f.subsystem + ")", f.name, "=", f.b, ":", f.desc)
}
return flags
}
-// TODO, switch to this
+// TODO, switch to this. maybe.
func ProcessFlags(callback func(*LogFlag)) {
flagsMutex.Lock()
defer flagsMutex.Unlock()
for _, f := range flags {
- Log(true, "ProcessFlags() run callback(f) here on", f)
+ Log(always, "ProcessFlags() run callback(f) here on", f)
callback(f)
}
}
+// returns the value of the flag
+func (f *LogFlag) Get() bool {
+ if ! f.Ok() {return false}
+ return f.b
+}
+
+// returns the name of the flag
+func (f *LogFlag) GetName() string {
+ if ! f.Ok() {return ""}
+ return f.name
+}
+
+// returns the subsystem of the flag
+func (f *LogFlag) GetSubsystem() string {
+ if ! f.Ok() {return ""}
+ return f.subsystem
+}
+
+// returns the description of the flag
+func (f *LogFlag) GetDesc() string {
+ if ! f.Ok() {return ""}
+ return f.desc
+}
// register a variable name from a subsystem
// inspired by Alex Flint
// set the Default value at the time of registration
-func (f *LogFlag) Register() {
+
+// this is what the current log.SetFlag() function should become
+func NewFlag(name string, b bool, full, short, desc string) *LogFlag {
flagsMutex.Lock()
defer flagsMutex.Unlock()
- Info("log.Register() ", f)
- f.Default = f.B
- if f.Short == "" {
- f.Short = f.Subsystem
- }
+ f := new(LogFlag)
+ Log(always, "log.SetFlag() ", full, short, name, true)
+ f.b = b
+ f.orig = b
+ f.short = short
+ f.subsystem = full
+ f.name = name
+ f.desc = desc
flags = append(flags,f)
+ return f
}
func (f *LogFlag) Set(b bool) {
+ if ! f.Ok() {return}
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)
+ 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()
Verbose("log.Set() TODO find var:", "(" + subsystem + ")", name, "=", b)
for _, f := range flags {
- Verbose("log.Set() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc)
- if (subsystem == f.Subsystem) && (name == f.Name) {
+ Verbose("log.Set() ", "(" + f.subsystem + ")", f.name, "=", f.b, ":", f.desc)
+ if (subsystem == f.subsystem) && (name == f.name) {
Verbose("log.Set() FOUND ", f)
- f.B = b
+ f.b = b
return
}
}
@@ -154,11 +202,12 @@ func Get(subsystem string, name string) bool {
defer flagsMutex.Unlock()
Verbose("log.Get() TODO find var:", "(" + subsystem + ")", name)
for _, f := range flags {
- Verbose("log.Get() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc)
- if (subsystem == f.Subsystem) && (name == f.Name) {
+ Verbose("log.Get() ", "(" + f.subsystem + ")", f.name, "=", f.b, ":", f.desc)
+ if (subsystem == f.subsystem) && (name == f.name) {
Verbose("log.Get() FOUND ", f)
- return f.B
+ return f.b
}
}
return false
}
+*/