我在抛出/捕获异常的 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)
显示两个单独条目的日志资源管理器:
{
"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"
}