googleapis / googleapis/python-aiplatform

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

Abierto
#3,667 0 comentarios 1 reacción 1 asignado Asignado a @sasha-gitg Ver en GitHub
api: vertex-ai
Lenguaje dominante
Python
Estrellas
905
Forks
465
Merge medio
1 d 13 h
PR fusionados (30 d)
44

Descripción

#### 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...
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.