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"
}