2023-12-10 15:07:50 +03:00
|
|
|
package xray
|
|
|
|
|
|
|
|
import (
|
2024-02-17 21:07:58 +03:00
|
|
|
"regexp"
|
2023-12-10 15:07:50 +03:00
|
|
|
"strings"
|
2024-03-11 00:31:24 +03:00
|
|
|
|
2023-12-10 15:07:50 +03:00
|
|
|
"x-ui/logger"
|
|
|
|
)
|
|
|
|
|
|
|
|
func NewLogWriter() *LogWriter {
|
|
|
|
return &LogWriter{}
|
|
|
|
}
|
|
|
|
|
|
|
|
type LogWriter struct {
|
|
|
|
lastLine string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (lw *LogWriter) Write(m []byte) (n int, err error) {
|
2024-02-17 21:07:58 +03:00
|
|
|
regex := regexp.MustCompile(`^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[([^\]]+)\] (.+)$`)
|
2023-12-10 15:07:50 +03:00
|
|
|
// Convert the data to a string
|
|
|
|
message := strings.TrimSpace(string(m))
|
|
|
|
messages := strings.Split(message, "\n")
|
|
|
|
lw.lastLine = messages[len(messages)-1]
|
|
|
|
|
|
|
|
for _, msg := range messages {
|
2024-02-17 21:07:58 +03:00
|
|
|
matches := regex.FindStringSubmatch(msg)
|
2024-01-10 15:46:18 +03:00
|
|
|
|
2024-02-17 21:07:58 +03:00
|
|
|
if len(matches) > 3 {
|
|
|
|
level := matches[2]
|
|
|
|
msgBody := matches[3]
|
2023-12-10 15:07:50 +03:00
|
|
|
|
|
|
|
// Map the level to the appropriate logger function
|
|
|
|
switch level {
|
|
|
|
case "Debug":
|
2024-02-19 00:15:00 +03:00
|
|
|
logger.Debug("XRAY: " + msgBody)
|
2023-12-10 15:07:50 +03:00
|
|
|
case "Info":
|
2024-02-19 00:15:00 +03:00
|
|
|
logger.Info("XRAY: " + msgBody)
|
2023-12-10 15:07:50 +03:00
|
|
|
case "Warning":
|
2024-02-19 00:15:00 +03:00
|
|
|
logger.Warning("XRAY: " + msgBody)
|
2023-12-10 15:07:50 +03:00
|
|
|
case "Error":
|
2024-02-19 00:15:00 +03:00
|
|
|
logger.Error("XRAY: " + msgBody)
|
2023-12-10 15:07:50 +03:00
|
|
|
default:
|
|
|
|
logger.Debug("XRAY: " + msg)
|
|
|
|
}
|
|
|
|
} else if msg != "" {
|
|
|
|
logger.Debug("XRAY: " + msg)
|
|
|
|
return len(m), nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return len(m), nil
|
|
|
|
}
|