diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-06-17 14:00:40 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-20 20:31:23 +0200 |
| commit | 7af07c596166bf93b79a9d0816b1950dde360fb9 (patch) | |
| tree | 08b5374c34d6c33b3c596ed981bfb069cca37ade /internal/log | |
| parent | 6dc7b64f634f6dcbeedea24c741382366a3c7b8c (diff) | |
Server: Implement function for checking renewal button visibility
Diffstat (limited to 'internal/log')
| -rw-r--r-- | internal/log/log.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/internal/log/log.go b/internal/log/log.go new file mode 100644 index 0000000..cba3364 --- /dev/null +++ b/internal/log/log.go @@ -0,0 +1,78 @@ +package log + +import ( + "fmt" + "log" + "os" + "path" + "github.com/jwijenbergh/eduvpn-common/internal/util" +) + +type FileLogger struct { + Level LogLevel + File *os.File +} + +type LogLevel int8 + +const ( + LOG_NOTSET LogLevel = iota + LOG_INFO + LOG_WARNING + LOG_ERROR +) + +func (e LogLevel) String() string { + switch e { + case LOG_NOTSET: + return "NOTSET" + case LOG_INFO: + return "INFO" + case LOG_WARNING: + return "WARNING" + case LOG_ERROR: + return "ERROR" + default: + return "UNKNOWN" + } +} + +func (logger *FileLogger) Init(level LogLevel, name string, directory string) error { + configDirErr := util.EnsureDirectory(directory) + if configDirErr != nil { + return &LogInitializeError{Name: name, Directory: directory, Err: configDirErr} + } + logFile, logOpenErr := os.OpenFile(logger.getFilename(directory, name), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) + if logOpenErr != nil { + return &LogInitializeError{Name: name, Directory: directory, Err: logOpenErr} + } + log.SetOutput(logFile) + logger.File = logFile + logger.Level = level + return nil +} + +func (logger *FileLogger) getFilename(directory string, name string) string { + pathString := path.Join(directory, name) + return fmt.Sprintf("%s.log", pathString) +} + +func (logger *FileLogger) Log(level LogLevel, str string) { + if level >= logger.Level && logger.Level != LOG_NOTSET { + log.Printf("[%s]: %s", level.String(), str) + } +} + +func (logger *FileLogger) Close() { + logger.File.Close() +} + +type LogInitializeError struct { + Name string + Directory string + Err error +} + +func (e *LogInitializeError) Error() string { + return fmt.Sprintf("failed initializing logging with name: %s and directory: %s with error: %v", e.Name, e.Directory, e.Err) +} |
