--- /dev/null
+// logger - minimal logger shared by everyone
+package lib
+
+import (
+ "log"
+ "os"
+)
+
+// public visible interface
+var Logger *MyLogger
+
+func init() {
+ Logger = new(MyLogger)
+ Logger.EnableLogging(false)
+}
+
+// just add an extra field to enable or not
+type MyLogger struct {
+ logging_enabled bool
+ logger *log.Logger
+}
+
+func (logger *MyLogger) EnableLogging(enable_logging bool) bool {
+ if logger.logging_enabled == enable_logging {
+ return enable_logging // as nothing to do
+ }
+
+ old_value := logger.logging_enabled
+ logger.logging_enabled = enable_logging
+
+ if enable_logging {
+ logfile := MyName() + ".log"
+
+ file, err := os.OpenFile(logfile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0600)
+ if err != nil {
+ log.Fatal("Failed to open log file", logfile, ":", err)
+ }
+ logger.logger = log.New(file, "", log.Ldate|log.Ltime|log.Lshortfile)
+ }
+ return old_value
+}
+
+// pass Println() calls downstream if we have a valid logger setup
+func (logger *MyLogger) Println(v ...interface{}) {
+ if logger.logger != nil {
+ logger.logger.Println(v)
+ }
+}