diff options
Diffstat (limited to 'src/log.go')
| -rw-r--r-- | src/log.go | 63 |
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() +} |
