로그 항목이 갑자기 종료되었는지 확인하는 가장 좋은 방법은 무엇입니까?

로그 항목이 갑자기 종료되었는지 확인하는 가장 좋은 방법은 무엇입니까?

로그 파일이 중간에 갑자기 끝나는 이전에 손상된 스크립트가 있습니다. 이는 각 사례를 볼 때 타임스탬프에서 분명하게 드러납니다. 이러한 모든 경우를 자동으로 grep하는 방법이 있습니까?

적절한 "payone_cancel.php end"를 사용한 건강한 결말의 예입니다.

2023-03-21T08:41:04+00:00       DEBUG       paypal  paypal_cancel.php begin
2023-03-21T08:41:04+00:00       DEBUG       paypal  params = {"id":123,"old_status":"","new_status":"DD"}
2023-03-21T08:41:04+00:00       DEBUG       paypal  JPATH_ROOT = [ROOT]
2023-03-21T08:41:04+00:00       DEBUG       paypal  PaypalCancel params = {"id":123,"old_status":"","new_status":"DD"}
2023-03-21T08:41:04+00:00       DEBUG       paypal  new_status is not EE or empty string, nothing to do
2023-03-21T08:41:04+00:00       DEBUG       paypal  paypal_cancel.php end

올바른 "paypal_cancel end" 줄 앞에 새 타임스탬프가 나타나는 오류 상태의 예:

2023-02-17T20:57:41+00:00       DEBUG       paypal  paypal_cancel.php begin
2023-02-17T20:57:41+00:00       DEBUG       paypal  params = {"id":"123","old_status":"EE","new_status":"EE"}
2023-02-17T20:57:41+00:00       DEBUG       paypal  JPATH_ROOT = [ROOT]
2023-02-17T20:57:41+00:00       DEBUG       paypal  PaypalCancel params = {"id":"123","old_status":"EE","new_status":"EE"}
2023-02-17T22:00:27+00:00       DEBUG       paypal  --- frontend paypal gateway begin ---

grep -l다양한 경우에 행 수가 다르기 때문에 작동하지 않을 수 있습니다.

awk를 다시 배워야 할지도 모르겠네요....

답변1

grep -F 'old_status":"DD","new_status":"EE' -A1 | \
awk '{if (prev_line ~ /PaypalCancel/ && time != $1) print prev_line; time = $1; prev_line = $0}'

녹음하는 동안 1초가 지나면 오탐지가 포함되지만 그것만으로도 충분합니다.

비결은 이전 행과 시간 열을 변수에 저장한 다음 이를 비교할 때 사용하는 것입니다.

관련 정보