logger.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package logger
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "path/filepath"
  7. "strconv"
  8. "time"
  9. )
  10. /*
  11. ArozOS System Logger
  12. This script is designed to make a managed log for the ArozOS system
  13. and replace the ton of log.Println in the system core
  14. */
  15. type Logger struct {
  16. LogToFile bool
  17. file *os.File
  18. }
  19. func NewLogger(logFilePrefix string, logFolder string, logToFile bool) (*Logger, error) {
  20. err := os.MkdirAll(logFolder, 0775)
  21. if err != nil {
  22. return nil, err
  23. }
  24. year, month, _ := time.Now().Date()
  25. logFilePath := filepath.Join(logFolder, logFilePrefix+"_"+strconv.Itoa(year)+"-"+strconv.Itoa(int(month))+".log")
  26. f, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0755)
  27. if err != nil {
  28. return nil, err
  29. }
  30. return &Logger{
  31. LogToFile: logToFile,
  32. file: f,
  33. }, nil
  34. }
  35. func (l *Logger) PrintAndLog(title string, message string, originalError error) {
  36. l.Log(title, message, originalError)
  37. log.Println("[" + title + "] " + message)
  38. }
  39. func (l *Logger) Log(title string, errorMessage string, originalError error) {
  40. if l.LogToFile {
  41. if originalError == nil {
  42. l.file.WriteString(time.Now().Format("2006-01-02 15:04:05.000000") + "|" + fmt.Sprintf("%-16s", title) + " [INFO]" + errorMessage + "\n")
  43. } else {
  44. l.file.WriteString(time.Now().Format("2006-01-02 15:04:05.000000") + "|" + fmt.Sprintf("%-16s", title) + " [ERROR]" + errorMessage + " " + originalError.Error() + "\n")
  45. }
  46. }
  47. }
  48. func (l *Logger) Close() {
  49. l.file.Close()
  50. }