diff options
Diffstat (limited to 'flags.go')
| -rw-r--r-- | flags.go | 179 |
1 files changed, 114 insertions, 65 deletions
@@ -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 } +*/ |
