diff --git a/error.go b/error.go index 6db5849..4a10455 100644 --- a/error.go +++ b/error.go @@ -5,7 +5,7 @@ import ( ) func Error(err error, a ...any) { - if ! ERROR.B { return } + if ! ERROR.b { return } origlog.Println("Error:", err) origlog.Println(a...) } diff --git a/flags.go b/flags.go index 9a54a81..0a00ed8 100644 --- a/flags.go +++ b/flags.go @@ -4,6 +4,25 @@ 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" ) @@ -15,57 +34,53 @@ var WARN LogFlag var ERROR LogFlag var PRINTLN LogFlag +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 := "gui" - 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.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() - - ERROR.B = true - ERROR.Name = "ERROR" - ERROR.Subsystem = "log" - ERROR.Desc = "Enable log.Error()" + 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.b = true + PRINTLN.name = "PRINTLN" + PRINTLN.subsystem = "log" + PRINTLN.desc = "Enable log.Println()" PRINTLN.Register() + + always.b = true + always.subsystem = "log" + always.short = "log" + always.Register() } // set all the flags @@ -73,16 +88,20 @@ func SetAll(b bool) { flagsMutex.Lock() defer flagsMutex.Unlock() for _, f := range flags { - f.B = b + f.b = b } } +func (f *LogFlag) SetDefault() { + f.b = f.orig +} + // set all the flags func SetDefaults() { flagsMutex.Lock() defer flagsMutex.Unlock() for _, f := range flags { - f.B = f.Default + f.b = f.orig } } @@ -94,7 +113,7 @@ 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 @@ -105,7 +124,7 @@ 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) } @@ -119,19 +138,60 @@ func (f *LogFlag) Register() { flagsMutex.Lock() defer flagsMutex.Unlock() Info("log.Register() ", f) - f.Default = f.B - if f.Short == "" { - f.Short = f.Subsystem + f.orig = f.b + if f.short == "" { + f.short = f.subsystem } flags = append(flags,f) } +func (f *LogFlag) Ok() bool { + if f == nil {return false} + return true +} + +func (f *LogFlag) Get() bool { + if ! f.Ok() {return false} + return f.b +} + +func (f *LogFlag) GetName() string { + if ! f.Ok() {return ""} + return f.name +} + +func (f *LogFlag) GetSubsystem() string { + if ! f.Ok() {return ""} + return f.subsystem +} + +func (f *LogFlag) GetDesc() string { + if ! f.Ok() {return ""} + return f.desc +} + +// this is what the current log.SetFlag() function should become +func (f *LogFlag) NewFlag(name string, b bool, full, short, desc string) { + if f != nil {return} + flagsMutex.Lock() + defer flagsMutex.Unlock() + Info("log.SetFlag() ", full, short, name, true) + f = new(LogFlag) + f.b = b + f.orig = b + f.short = short + f.subsystem = full + f.name = name + f.desc = desc + flags = append(flags,f) +} + 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) + 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) { @@ -139,10 +199,10 @@ func Set(subsystem string, name string, b bool) { 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,10 +214,10 @@ 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 diff --git a/info.go b/info.go index 0ffd53a..574aa4b 100644 --- a/info.go +++ b/info.go @@ -5,11 +5,11 @@ import ( ) func Info(a ...any) { - if ! INFO.B { return } + if ! INFO.b { return } golanglog.Println(a...) } func Infof(s string, a ...any) { - if ! INFO.B { return } + if ! INFO.b { return } golanglog.Printf(s, a...) } diff --git a/log.go b/log.go index 1382816..6095f12 100644 --- a/log.go +++ b/log.go @@ -20,41 +20,18 @@ In your package, register NETWARN: log.Register("myNetPkg", "NETWARN", &NETWARN) */ -func Log(x any, a ...any) { - if x == nil { return } - switch x.(type) { - case bool: - if ! x.(bool) { - return - } - origlog.Println(a...) - case LogFlag: - var f LogFlag - f = x.(LogFlag) - if ! f.B { - return - } - a = append([]any{f.Short}, a...) - origlog.Println(a...) - default: - a = append([]any{x}, a...) - origlog.Println(a...) +func Log(f LogFlag, a ...any) { + if ! f.b { + return } + a = append([]any{f.short}, a...) + origlog.Println(a...) } -func Logf(x any, s string, a ...any) { - if x == nil { return } - switch x.(type) { - case bool: - if ! x.(bool) { - return - } - case LogFlag: - var f LogFlag - f = x.(LogFlag) - if ! f.B { - return - } +func Logf(f LogFlag, s string, a ...any) { + if ! f.b { + return } + s = f.short + " " + s origlog.Printf(s, a...) } diff --git a/original.go b/original.go index b76dcf6..b0cf01f 100644 --- a/original.go +++ b/original.go @@ -19,18 +19,48 @@ package log */ // TODO: fill in the other functions from "log". Is there a way to automagically do that? +// the full list is: +/* + type Logger + + // NEED THESE + func (l *Logger) Fatal(v ...any) + func (l *Logger) Fatalf(format string, v ...any) + func (l *Logger) Fatalln(v ...any) + func (l *Logger) Panic(v ...any) + func (l *Logger) Panicf(format string, v ...any) + func (l *Logger) Panicln(v ...any) + func (l *Logger) Print(v ...any) + func (l *Logger) Printf(format string, v ...any) + func (l *Logger) Println(v ...any) + + func Default() *Logger + func New(out io.Writer, prefix string, flag int) *Logger + + // what are these? + func (l *Logger) Flags() int + func (l *Logger) SetFlags(flag int) + func (l *Logger) Prefix() string + func (l *Logger) SetPrefix(prefix string) + + // probably not this stuff + func (l *Logger) SetOutput(w io.Writer) + func (l *Logger) Output(calldepth int, s string) error + func (l *Logger) Writer() io.Writer +*/ + import ( origlog "log" ) func Println(a ...any) { - if ! PRINTLN.B { return } + if ! PRINTLN.b { return } origlog.Println(a...) } func Printf(s string, a ...any) { - if ! PRINTLN.B { return } + if ! PRINTLN.b { return } origlog.Printf(s, a...) } diff --git a/spew.go b/spew.go index 2ea40f0..d897cce 100644 --- a/spew.go +++ b/spew.go @@ -6,7 +6,7 @@ import ( ) func Spew(b any, a ...any) { - if ! SPEW.B { return } + if ! SPEW.b { return } switch b.(type) { case bool: @@ -17,7 +17,7 @@ func Spew(b any, a ...any) { case LogFlag: var f LogFlag f = b.(LogFlag) - if ! f.B { + if ! f.b { return } origlog.Println("SPEW:", spew.Sdump(a...)) diff --git a/verbose.go b/verbose.go index 31c3772..2359046 100644 --- a/verbose.go +++ b/verbose.go @@ -5,6 +5,6 @@ import ( ) func Verbose(a ...any) { - if ! VERBOSE.B { return } + if ! VERBOSE.b { return } golanglog.Println(a...) } diff --git a/warn.go b/warn.go index 0ad3118..8fd4cc7 100644 --- a/warn.go +++ b/warn.go @@ -5,6 +5,6 @@ import ( ) func Warn(a ...any) { - if ! WARN.B { return } + if ! WARN.b { return } origlog.Println(a...) }