Tôi đang làm việc với ứng dụng Java kế thừa không có ghi nhật ký và chỉ in tất cả thông tin vào bảng điều khiển. Hầu hết các trường hợp ngoại lệ cũng được "xử lý" bằng cách thực hiện lệnh gọi printStackTrace().Cụm từ thông dụng để phân tích cú pháp tệp nhật ký và tìm stacktraces
Tóm lại, tôi vừa chuyển hướng các luồng System.out và System.error thành tệp nhật ký và bây giờ tôi cần phải phân tích cú pháp tệp nhật ký đó. Cho đến nay tất cả đều tốt, nhưng tôi đang gặp sự cố khi phân tích tệp nhật ký cho các dấu vết ngăn xếp.
Một số mã bị che khuất là tốt, vì vậy tôi cần chạy stacktraces thông qua một ứng dụng tiện ích để loại bỏ chúng. Tôi đang cố gắng tự động hóa tất cả điều này.
Gần nhất tôi đã đi cho đến nay là để có được dòng ngoại lệ ban đầu sử dụng này:
.+Exception[^\n]+
Và việc tìm kiếm "ở .. (..)" dòng sử dụng:
(\t+\Qat \E.+\s+)+
Nhưng tôi không thể tìm ra cách để đặt chúng lại với nhau để có được stacktrace đầy đủ.
Về cơ bản, tệp nhật ký trông giống như sau. Không có kết cấu cố định và các đường trước và sau khi chồng dấu vết là hoàn toàn ngẫu nhiên:
Modem ERROR (AT
Owner: CoreTalk
) - TIMEOUT
IN []
Try Open: COM3
javax.comm.PortInUseException: Port currently owned by CoreTalk
at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
...
at UniPort.modemService.run(modemService.java:103)
Handling file: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify
java.io.FileNotFoundException: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
...
at com.gobackbone.Store.a.a.handle(Unknown Source)
at com.jniwrapper.win32.io.FileSystemWatcher.fireFileSystemEvent(FileSystemWatcher.java:223)
...
at java.lang.Thread.run(Unknown Source)
Load Additional Ports
... Lots of random stuff
IN []
[Fatal Error] .xml:6:114: The entity name must immediately follow the '&' in the entity reference.
org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
...
at com.gobackbone.Store.a.a.run(Unknown Source)
Điều đó sẽ chỉ tìm thấy dòng "đầu tiên" đầu tiên chứ không phải tất cả chúng. –
Bạn đã thử chưa? Đó là những gì cuối cùng '+' là cho. Hoặc có thể có một cái gì đó giữa các "tại" dòng (là những '...' hiện diện trong các tập tin đăng nhập thực tế)? Ngoài ra, trong văn bản ví dụ của bạn (ít nhất là được đăng ở đây), các dòng "tại" bắt đầu bằng dấu cách, không phải các tab. Regex thứ hai của tôi nên đã xử lý này, mặc dù. –
Xin lỗi, tôi không thấy dòng thứ hai vì lý do nào đó ... Sử dụng: ^. + Ngoại lệ [^ \ n] ++ (\ s + tại. ++) + Tôi không nhận được bất kỳ kết quả phù hợp nào. .. ++ làm gì? Đó có phải là cách viết tắt của: (^. + Ngoại lệ [^ \ n] +) + ((\ s + tại. +) +) + –