googleapis / googleapis/google-cloud-python
Logging the literal string "None" is silently dropped (payload becomes empty)
- 主要语言
- Python
- 星标
- 5.4k
- 派生
- 1.8k
- 平均合并
- 3 天 4 小时
- 30 天内合并 PR
- 122
描述
- [x] I determined this is the correct repository in which to report this bug.
## Summary of the issue
**Context**
Using `CloudLoggingHandler` / `StructuredLogHandler` via the Python standard logging module, I logged the string `"None"` (e.g. `logging.getLogger().info("None")`).
**Expected Behavior:**
The log entry payload should contain the text `"None"`, just like any other string.
**Actual Behavior:**
The message is silently dropped: the parsed payload becomes `None` (empty), so the log content disappears.
## API client name and version
google-cloud-logging v3.15.0 (also present on current `main`)
## Reproduction steps: code
```python
import logging
from google.cloud.logging_v2.handlers import handlers as H
class FakeHandler(logging.Handler):
pass
h = FakeHandler()
h.setFormatter(logging.Formatter())
def rec(msg):
return logging.LogRecord("n", logging.INFO, "p", 1, msg, (), None)
for msg in ["None", "hello", ""]:
print(repr(msg), "->", repr(H._format_and_parse_message(rec(msg), h)))
```
## Reproduction steps: actual results
```
'None' -> None # the user's message is dropped
'hello' -> 'hello'
'' -> ''
```
## Reproduction steps: expected results
```
'None' -> 'None' # the literal string should be preserved
'hello' -> 'hello'
'' -> ''
```
## OS & version + platform
Any (logic bug, platform-independent)
## Python environment
Python 3.12
## Additional context
Root cause in `google/cloud/logging_v2/handlers/handlers.py` (`_format_and_parse_message`):
```python
if message != "None":
passed_json_fields["message"] = message
...
return message if message != "None" else None
```
The intent appears to be detecting a record whose `msg` is the Python object `None` (which `logging.Formatter` renders as the string `"None"`). But comparing the *formatted string* against `"None"` also matches a legitimate user message of the literal text `"None"`, dropping it. Detecting emptiness from `record.msg is None` (before formatting) rather than from the formatted output would avoid the false positive.
贡献指南
评估
这个 Issue 还没有评估数据。