1

try/except ブロック内に、例外をスロー/キャッチするコード ブロックがあります (ある場合は psycopg2 で、別の場合は CRCError)。例外は、標準ライブラリ (以下のサンプル コード) を使用してログに記録されます。

GCP エラー レポートは、キャッチされた例外 (コンテキストの欠如) をログに記録しています。

次のことをどのように達成できますか?

  • コンテキスト例外を伴う例外がエラー報告コンソールに明示的に表示されることを確認してください。- 実際、ここでの答えは [エラー報告クライアントを明示的に使用する][1] であることがわかっています。これは、他の場所でこれを行うか、例外がキャッチされないようにするためです (この場合、実行フローが変更されるため望ましくありません)。
  • GCP がこれらの「エラー」を明示的にログに記録しないようにする - これは私が困惑した部分です。キャッチされた例外のスタック トレースを明示的に飲み込みたくありません。これは、アプリケーション全体のログを構成した方法と関係がありますか? GCP ログ エクスプローラーに以下の 2 つの個別のエントリが表示されることに注意してください。

OSError を処理/ログに記録するサンプル コード:

try:
    with open(out_path, 'wb') as fout:
        with gzip.open(in_path, 'rb') as fin:
            shutil.copyfileobj(fin, fout)
except Exception:
    LOGGER.exception("Fatal error decompressing %s to %s, skipping", in_path, out_path)

対応するエラー報告エントリ:

OSError: CRC check failed 0xa3d2ba37 != 0xb3b0d715
at _read_eof (/usr/local/lib/python3.7/gzip.py:512)
at read (/usr/local/lib/python3.7/gzip.py:465)
at readinto (/usr/local/lib/python3.7/_compression.py:68)
at read (/usr/local/lib/python3.7/gzip.py:287)
at copyfileobj (/usr/local/lib/python3.7/shutil.py:79)
at gunzip (xxx:NN)

ログ エクスプローラーに 2 つの個別のエントリが表示されます。

{
    "textPayload": "2021-12-09 20:49:08,918 - __main__ - ERROR - Fatal error decompressing 0001.bin.gz to 0001.bin, skipping\n",
    "insertId": "insertId1",
    "resource": {
        "type": "k8s_container",
        ...
    },
    "timestamp": "2021-12-09T20:49:08.918859648Z",
    "severity": "ERROR",
    "logName": "projects/myproject/logs/stderr",
    "receiveTimestamp": "2021-12-09T20:49:10.383920475Z"
}
{
    "textPayload": "Traceback (most recent call last):\n  File \"xxx.py\", line NN, in gunzip\n    shutil.copyfileobj(fin, fout)\n  File \"/usr/local/lib/python3.7/shutil.py\", line 79, in copyfileobj\n    buf = fsrc.read(length)\n  File \"/usr/local/lib/python3.7/gzip.py\", line 287, in read\n    return self._buffer.read(size)\n  File \"/usr/local/lib/python3.7/_compression.py\", line 68, in readinto\n    data = self.read(len(byte_view))\n  File \"/usr/local/lib/python3.7/gzip.py\", line 465, in read\n    self._read_eof()\n  File \"/usr/local/lib/python3.7/gzip.py\", line 512, in _read_eof\n    hex(self._crc)))\nOSError: CRC check failed 0xa3d2ba37 != 0xb3b0d715\n",
    "insertId": "insertId2",
    "resource": {
        "type": "k8s_container",
        ...
    },
    "timestamp": "2021-12-09T20:49:08.918931417Z",
    "severity": "ERROR",
    "logName": "projects/myproject/logs/stderr",
    "receiveTimestamp": "2021-12-09T20:49:10.383920475Z"
}
4

1 に答える 1