googleapis / googleapis/python-aiplatform
Importing `google.cloud.aiplatform` has side-effects and misconfigures logging
- 主要言語
- Python
- スター
- 905
- フォーク
- 465
- 平均マージ
- 1日 13時間
- マージ済み PR(30日)
- 44
説明
#### Environment details
- OS type and version: WSL/Ubuntu 20.04
- Python version: python3.11
- pip version: N/A
- `google-cloud-aiplatform` version: `1.47.0`
#### Steps to reproduce
1. Import aiplatform into any code before initializing logging
2. Note that there are either incorrectly configured logs or duplicate logs
#### Code example
```python
# This creates a logging.StreamHandler and adds it, forcing output. Note that I'm normally *not* importing this, but rather just `aiplatform.init` for example. The logger is created as soon as the file is imported.
from google.cloud.aiplatform.base import _LOGGER
import logging
import sys
logger = logging.getLogger(__file__)
logging.basicConfig(level=logging.INFO, handlers=[logging.StreamHandler(sys.stdout)])
# ok
logger.info("foobar")
# duplicate
_LOGGER.info("I'm duplicated")
```
Gives the output:
```
INFO:/home/ts/Repositories/spoof-vai/example.py:foobar
I'm duplicated
INFO:google.cloud.aiplatform.base:I'm duplicated
```
This means that any actual diagnostic output from the functions on VertexLogger appears twice in my output. A library should never create a logging handler, and should trust the end user to properly configure logging if desired. And if it *HAD* to create a logging handler, it shouldn't do so by side-effecting on an import.
For anyone finding this in search, the workaround I've found to prevent this handler creation is to *be faster*, by ensuring all my entrypoints look something like this:
```py3
import logging
import sys
root = logging.getLogger()
handler = logging.StreamHandler(sys.stdout)
root.addHandler(handler)
import aiplatform
...
def main():
logging.basicConfig(..., force=True) # or whatever logging you want to use...
```
コントリビューションガイド
評価
この issue はまだ評価されていません。