logdata.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2025 BackendServerTemplate Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package logformat
  5. import (
  6. "github.com/SongZihuan/BackendServerTemplate/src/global"
  7. "github.com/SongZihuan/BackendServerTemplate/src/logger/loglevel"
  8. "github.com/SongZihuan/BackendServerTemplate/src/utils/osutils"
  9. "os"
  10. "os/user"
  11. "strings"
  12. "time"
  13. )
  14. type LogData struct {
  15. LogLevel loglevel.LoggerLevel `json:"-"`
  16. Level string `json:"level"`
  17. Now time.Time `json:"-"`
  18. Date string `json:"date"`
  19. Zone string `json:"zone"`
  20. Timestamp int64 `json:"timestamp"`
  21. Exec string `json:"exec"`
  22. Name string `json:"name"`
  23. Version string `json:"version"`
  24. User *user.User `json:"-"`
  25. Uid string `json:"uid"`
  26. Gid string `json:"gid"`
  27. UserName string `json:"username"`
  28. WorkDirectory string `json:"work-directory"`
  29. Pid int `json:"pid"`
  30. ParentPid int `json:"ppid"`
  31. Msg string `json:"msg"`
  32. }
  33. func GetLogData(level loglevel.LoggerLevel, msg string, now time.Time) *LogData {
  34. var res = new(LogData)
  35. now = now.In(global.Location)
  36. res.LogLevel = level
  37. res.Level = strings.ToUpper(string(level))
  38. res.Now = now
  39. res.Date = now.Format(time.DateTime)
  40. res.Zone = global.Location.String()
  41. res.Timestamp = now.Unix()
  42. res.Name = global.Name
  43. res.Version = global.Version
  44. u := getUser()
  45. if u != nil {
  46. res.User = u
  47. res.Uid = u.Uid
  48. res.Gid = u.Gid
  49. res.UserName = getUserName(u)
  50. } else {
  51. res.User = nil
  52. res.Uid = ""
  53. res.Gid = ""
  54. res.UserName = ""
  55. }
  56. wd := getWorkDir()
  57. if wd != "" {
  58. res.WorkDirectory = wd
  59. } else {
  60. res.WorkDirectory = ""
  61. }
  62. res.Pid = os.Getpid()
  63. res.ParentPid = os.Getppid()
  64. res.Exec = osutils.GetArgs0Name()
  65. res.Msg = strings.Replace(msg, "\"", "'", -1)
  66. return res
  67. }
  68. func getUserName(u *user.User) (name string) {
  69. if name = u.Name; name != "" {
  70. return name
  71. }
  72. if name = u.Username; name != "" {
  73. return name
  74. }
  75. return "-"
  76. }
  77. func getUser() *user.User {
  78. currentUser, err := user.Current()
  79. if err != nil {
  80. return nil
  81. }
  82. return currentUser
  83. }
  84. func getWorkDir() string {
  85. dir, err := os.Getwd()
  86. if err != nil {
  87. return "未知"
  88. }
  89. return dir
  90. }