sys_log.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package common
  2. import (
  3. "fmt"
  4. "os"
  5. "sync"
  6. "time"
  7. "github.com/gin-gonic/gin"
  8. )
  9. // LogWriterMu protects concurrent access to gin.DefaultWriter/gin.DefaultErrorWriter
  10. // during log file rotation. Acquire RLock when reading/writing through the writers,
  11. // acquire Lock when swapping writers and closing old files.
  12. var LogWriterMu sync.RWMutex
  13. func SysLog(s string) {
  14. t := time.Now()
  15. LogWriterMu.RLock()
  16. _, _ = fmt.Fprintf(gin.DefaultWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
  17. LogWriterMu.RUnlock()
  18. }
  19. func SysError(s string) {
  20. t := time.Now()
  21. LogWriterMu.RLock()
  22. _, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[SYS] %v | %s \n", t.Format("2006/01/02 - 15:04:05"), s)
  23. LogWriterMu.RUnlock()
  24. }
  25. func FatalLog(v ...any) {
  26. t := time.Now()
  27. LogWriterMu.RLock()
  28. _, _ = fmt.Fprintf(gin.DefaultErrorWriter, "[FATAL] %v | %v \n", t.Format("2006/01/02 - 15:04:05"), v)
  29. LogWriterMu.RUnlock()
  30. os.Exit(1)
  31. }
  32. func LogStartupSuccess(startTime time.Time, port string) {
  33. duration := time.Since(startTime)
  34. durationMs := duration.Milliseconds()
  35. // Get network IPs
  36. networkIps := GetNetworkIps()
  37. LogWriterMu.RLock()
  38. defer LogWriterMu.RUnlock()
  39. fmt.Fprintf(gin.DefaultWriter, "\n")
  40. fmt.Fprintf(gin.DefaultWriter, " \033[32m%s %s\033[0m ready in %d ms\n", SystemName, Version, durationMs)
  41. fmt.Fprintf(gin.DefaultWriter, "\n")
  42. if !IsRunningInContainer() {
  43. fmt.Fprintf(gin.DefaultWriter, " ➜ \033[1mLocal:\033[0m http://localhost:%s/\n", port)
  44. }
  45. for _, ip := range networkIps {
  46. fmt.Fprintf(gin.DefaultWriter, " ➜ \033[1mNetwork:\033[0m http://%s:%s/\n", ip, port)
  47. }
  48. fmt.Fprintf(gin.DefaultWriter, "\n")
  49. }