File tree 2 files changed +19
-6
lines changed
2 files changed +19
-6
lines changed Original file line number Diff line number Diff line change @@ -16,11 +16,24 @@ type LogWriter struct {
16
16
}
17
17
18
18
func (lw * LogWriter ) Write (m []byte ) (n int , err error ) {
19
- regex := regexp .MustCompile (`^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[([^\]]+)\] (.+)$` )
19
+ crashRegex := regexp .MustCompile (`(?i)(panic|exception|stack trace|fatal error)` )
20
+
20
21
// Convert the data to a string
21
22
message := strings .TrimSpace (string (m ))
23
+
24
+ // Check if the message contains a crash
25
+ if crashRegex .MatchString (message ) {
26
+ logger .Debug ("Core crash detected:\n " , message )
27
+ lw .lastLine = message
28
+ err1 := writeCrachReport (m )
29
+ if err1 != nil {
30
+ logger .Error ("Unable to write crash report:" , err1 )
31
+ }
32
+ return len (m ), nil
33
+ }
34
+
35
+ regex := regexp .MustCompile (`^(\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[([^\]]+)\] (.+)$` )
22
36
messages := strings .Split (message , "\n " )
23
- lw .lastLine = messages [len (messages )- 1 ]
24
37
25
38
for _ , msg := range messages {
26
39
matches := regex .FindStringSubmatch (msg )
@@ -42,9 +55,10 @@ func (lw *LogWriter) Write(m []byte) (n int, err error) {
42
55
default :
43
56
logger .Debug ("XRAY: " + msg )
44
57
}
58
+ lw .lastLine = ""
45
59
} else if msg != "" {
46
60
logger .Debug ("XRAY: " + msg )
47
- return len ( m ), nil
61
+ lw . lastLine = msg
48
62
}
49
63
}
50
64
Original file line number Diff line number Diff line change @@ -226,7 +226,6 @@ func (p *process) Start() (err error) {
226
226
if err != nil {
227
227
logger .Error ("Failure in running xray-core:" , err )
228
228
p .exitErr = err
229
- p .witeCrachReport (err )
230
229
}
231
230
}()
232
231
@@ -243,7 +242,7 @@ func (p *process) Stop() error {
243
242
return p .cmd .Process .Signal (syscall .SIGTERM )
244
243
}
245
244
246
- func ( p * process ) witeCrachReport ( err error ) error {
245
+ func writeCrachReport ( m [] byte ) error {
247
246
crashReportPath := config .GetBinFolderPath () + "/core_crash_" + time .Now ().Format ("20060102_150405" ) + ".log"
248
- return os .WriteFile (crashReportPath , [] byte ( err . Error ()) , os .ModePerm )
247
+ return os .WriteFile (crashReportPath , m , os .ModePerm )
249
248
}
You can’t perform that action at this time.
0 commit comments