package opslog import ( "fmt" "os" "path/filepath" "sync" "time" ) type Logger struct { dir string mu sync.Mutex } func New(dir string) *Logger { if dir == "" { return nil } return &Logger{dir: dir} } func (l *Logger) Write(ip, user, action string) error { if l == nil || l.dir == "" { return nil } l.mu.Lock() defer l.mu.Unlock() if err := os.MkdirAll(l.dir, 0755); err != nil { return err } f, err := os.OpenFile(filepath.Join(l.dir, "ops.log"), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { return err } defer f.Close() _, err = fmt.Fprintf(f, "%s - %s - user(%s) %s\n", time.Now().Format("2006-01-02 15:04:05"), ip, user, action) return err }