logger.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. go func() {
  37. l.Log(title, message, originalError)
  38. }()
  39. log.Println("[" + title + "] " + message)
  40. }
  41. func (l *Logger) Log(title string, errorMessage string, originalError error) {
  42. if l.LogToFile {
  43. if originalError == nil {
  44. l.file.WriteString(time.Now().Format("2006-01-02 15:04:05.000000") + "|" + fmt.Sprintf("%-16s", title) + " [INFO]" + errorMessage + "\n")
  45. } else {
  46. l.file.WriteString(time.Now().Format("2006-01-02 15:04:05.000000") + "|" + fmt.Sprintf("%-16s", title) + " [ERROR]" + errorMessage + " " + originalError.Error() + "\n")
  47. }
  48. }
  49. }
  50. func (l *Logger) Close() {
  51. l.file.Close()
  52. }