summaryrefslogtreecommitdiff
path: root/src/log.go
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-03-29 15:33:10 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-03-29 15:33:10 +0200
commita6a6d0d42d70aff21cf759b3c2d7645c7475c5f3 (patch)
tree4d1b1982319c6922bb9d882a6684a689d601732d /src/log.go
parent3e7bae91097d9a67262ab0d0b8450d9371201629 (diff)
Debugging: Implement a basic level-based file logger
Diffstat (limited to 'src/log.go')
-rw-r--r--src/log.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/log.go b/src/log.go
new file mode 100644
index 0000000..6ee81e3
--- /dev/null
+++ b/src/log.go
@@ -0,0 +1,63 @@
+package eduvpn
+
+import (
+ "fmt"
+ "log"
+ "os"
+ "path"
+)
+
+type FileLogger struct {
+ Level LogLevel
+ File *os.File
+}
+
+type LogLevel int8
+
+const (
+ LOG_INFO LogLevel = iota
+ LOG_WARNING
+ LOG_ERROR
+)
+
+func (e LogLevel) String() string {
+ switch e {
+ case LOG_INFO:
+ return "INFO"
+ case LOG_WARNING:
+ return "WARNING"
+ case LOG_ERROR:
+ return "ERROR"
+ default:
+ return "UNKNOWN"
+ }
+}
+
+func (eduvpn *VPNState) getLogFilename() string {
+ pathString := path.Join(eduvpn.ConfigDirectory, eduvpn.Name)
+ return fmt.Sprintf("%s.log", pathString)
+}
+
+func (eduvpn *VPNState) InitLog(level LogLevel) error {
+ configDirErr := eduvpn.EnsureConfigDir()
+ if configDirErr != nil {
+ return configDirErr
+ }
+ logFile, logOpenErr := os.OpenFile(eduvpn.getLogFilename(), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666)
+ if logOpenErr != nil {
+ return logOpenErr
+ }
+ log.SetOutput(logFile)
+ eduvpn.LogFile = &FileLogger{Level: level, File: logFile}
+ return nil
+}
+
+func (eduvpn *VPNState) Log(level LogLevel, str string) {
+ if level >= eduvpn.LogFile.Level {
+ log.Printf("[%s]: %s", level.String(), str)
+ }
+}
+
+func (eduvpn *VPNState) CloseLog() {
+ eduvpn.LogFile.File.Close()
+}