1
0

log_writer.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package xray
  2. import (
  3. "strings"
  4. "x-ui/logger"
  5. )
  6. func NewLogWriter() *LogWriter {
  7. return &LogWriter{}
  8. }
  9. type LogWriter struct {
  10. lastLine string
  11. }
  12. func (lw *LogWriter) Write(m []byte) (n int, err error) {
  13. // Convert the data to a string
  14. message := strings.TrimSpace(string(m))
  15. messages := strings.Split(message, "\n")
  16. lw.lastLine = messages[len(messages)-1]
  17. for _, msg := range messages {
  18. messageBody := msg
  19. // Remove timestamp
  20. splittedMsg := strings.SplitN(msg, " ", 3)
  21. if len(splittedMsg) > 2 {
  22. messageBody = strings.TrimSpace(strings.SplitN(msg, " ", 3)[2])
  23. }
  24. // Find level in []
  25. startIndex := strings.Index(messageBody, "[")
  26. endIndex := strings.Index(messageBody, "]")
  27. if startIndex != -1 && endIndex != -1 {
  28. level := strings.TrimSpace(messageBody[startIndex+1 : endIndex])
  29. msgBody := "XRAY: " + strings.TrimSpace(messageBody[endIndex+1:])
  30. // Map the level to the appropriate logger function
  31. switch level {
  32. case "Debug":
  33. logger.Debug(msgBody)
  34. case "Info":
  35. logger.Info(msgBody)
  36. case "Warning":
  37. logger.Warning(msgBody)
  38. case "Error":
  39. logger.Error(msgBody)
  40. default:
  41. logger.Debug("XRAY: " + msg)
  42. }
  43. } else if msg != "" {
  44. logger.Debug("XRAY: " + msg)
  45. return len(m), nil
  46. }
  47. }
  48. return len(m), nil
  49. }