ログエントリが突然終了したことを確認するための最良の方法は何ですか?

ログエントリが突然終了したことを確認するための最良の方法は何ですか?

ログファイルが途中で突然終了する以前に破損したスクリプトがあります。これは、各ケースを見るとタイムスタンプで明らかに明らかになります。これらすべてのケースを自動的に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秒経過すると誤検出が含まれますが、それだけで十分です。

秘密は、前の行と時刻の列を変数に保存してから比較するときに使用することです。

おすすめ記事