googleapis / googleapis/python-aiplatform

Importing `google.cloud.aiplatform` has side-effects and misconfigures logging

オープン
#3,667 コメント 0 件 リアクション 1 件 担当者 1 名 @sasha-gitg に割り当て済み GitHub で見る
api: vertex-ai
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。