1
0

log_writer.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. // Remove timestamp
  19. messageBody := strings.TrimSpace(strings.SplitN(msg, " ", 3)[2])
  20. // Find level in []
  21. startIndex := strings.Index(messageBody, "[")
  22. endIndex := strings.Index(messageBody, "]")
  23. if startIndex != -1 && endIndex != -1 {
  24. level := strings.TrimSpace(messageBody[startIndex+1 : endIndex])
  25. msgBody := "XRAY: " + strings.TrimSpace(messageBody[endIndex+1:])
  26. // Map the level to the appropriate logger function
  27. switch level {
  28. case "Debug":
  29. logger.Debug(msgBody)
  30. case "Info":
  31. logger.Info(msgBody)
  32. case "Warning":
  33. logger.Warning(msgBody)
  34. case "Error":
  35. logger.Error(msgBody)
  36. default:
  37. logger.Debug("XRAY: " + msg)
  38. }
  39. } else if msg != "" {
  40. logger.Debug("XRAY: " + msg)
  41. return len(m), nil
  42. }
  43. }
  44. return len(m), nil
  45. }