diff options
| author | mhsanaei <ho3ein.sanaei@gmail.com> | 2024-12-04 01:07:24 +0300 |
|---|---|---|
| committer | mhsanaei <ho3ein.sanaei@gmail.com> | 2024-12-04 01:07:24 +0300 |
| commit | 4c4cc362b37f6c23ab3a79651d0c0e67cc70974d (patch) | |
| tree | 121d699b0877a011c28bfa2ed98c037f669cbe39 /xray/log_writer.go | |
| parent | 4e0aca16c22be4d6feb842bca8dc94141c2db775 (diff) | |
fix crash report
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'xray/log_writer.go')
| -rw-r--r-- | xray/log_writer.go | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/xray/log_writer.go b/xray/log_writer.go index c8d966b5..cc00d541 100644 --- a/xray/log_writer.go +++ b/xray/log_writer.go @@ -16,11 +16,24 @@ type LogWriter struct { } func (lw *LogWriter) Write(m []byte) (n int, err error) { - regex := regexp.MustCompile(`^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[([^\]]+)\] (.+)$`) + crashRegex := regexp.MustCompile(`(?i)(panic|exception|stack trace|fatal error)`) + // Convert the data to a string message := strings.TrimSpace(string(m)) + + // Check if the message contains a crash + if crashRegex.MatchString(message) { + logger.Debug("Core crash detected:\n", message) + lw.lastLine = message + err1 := writeCrachReport(m) + if err1 != nil { + logger.Error("Unable to write crash report:", err1) + } + return len(m), nil + } + + regex := regexp.MustCompile(`^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[([^\]]+)\] (.+)$`) messages := strings.Split(message, "\n") - lw.lastLine = messages[len(messages)-1] for _, msg := range messages { matches := regex.FindStringSubmatch(msg) @@ -42,9 +55,10 @@ func (lw *LogWriter) Write(m []byte) (n int, err error) { default: logger.Debug("XRAY: " + msg) } + lw.lastLine = "" } else if msg != "" { logger.Debug("XRAY: " + msg) - return len(m), nil + lw.lastLine = msg } } |
