Naplózás konfigurálása a PythonHoz készült Azure-kódtárakban
Az Azure.core-on alapuló Python-kódtárak a standard Python-naplózási kódtár használatával biztosítják a naplózási kimenetet.
A naplózással kapcsolatos általános folyamat a következő:
- Szerezze be a kívánt tár naplózási objektumát, és állítsa be a naplózási szintet.
- Regisztráljon egy kezelőt a naplózási adatfolyamhoz.
- HTTP-információk megadásához adjon meg egy paramétert
logging_enable=True
egy ügyfélobjektum-konstruktornak, egy hitelesítőadat-objektum konstruktorának vagy egy adott metódusnak.
A részleteket a cikk további szakaszaiban találja.
Általános szabály, hogy a kódtárak naplózási használatának megértéséhez a legjobb erőforrás az SDK forráskódjának tallózása github.com/Azure/azure-sdk-for-python. Javasoljuk, hogy helyileg klónozza ezt az adattárat, hogy szükség esetén könnyen rákereshesse a részletekre, ahogy az alábbi szakaszok is sugallják.
Naplózási szintek beállítása
import logging
# ...
# Acquire the logger for a library (azure.mgmt.resource in this example)
logger = logging.getLogger('azure.mgmt.resource')
# Set the desired logging level
logger.setLevel(logging.DEBUG)
- Ez a példa beolvasja a kódtár naplózóit
azure.mgmt.resource
, majd beállítja a naplózási szintetlogging.DEBUG
. - Bármikor felhívhatja
logger.setLevel
a különböző kódszegmensek naplózási szintjét.
Ha egy másik kódtár szintjét szeretné beállítani, használja a kódtár nevét a logging.getLogger
hívásban. Az azure-eventhubs kódtár például egy logger nevű azure.eventhubs
, az azure-storage-queue kódtár pedig egy névvel ellátott azure.storage.queue
naplózót biztosít, és így tovább. (Az SDK-forráskód gyakran használja az utasítást logging.getLogger(__name__)
, amely egy naplózót szerez be az azt tartalmazó modul nevével.)
Általánosabb névtereket is használhat. Például,
import logging
# Set the logging level for all azure-storage-* libraries
logger = logging.getLogger('azure.storage')
logger.setLevel(logging.INFO)
# Set the logging level for all azure-* libraries
logger = logging.getLogger('azure')
logger.setLevel(logging.ERROR)
A azure
naplózót egyes kódtárak használják egy adott naplózó helyett. Az azure-storage-blob kódtár például a naplózót azure
használja.
Ezzel a logger.isEnabledFor
módszerrel ellenőrizheti, hogy engedélyezve van-e egy adott naplózási szint:
print(
f"Logger enabled for ERROR={logger.isEnabledFor(logging.ERROR)}, "
f"WARNING={logger.isEnabledFor(logging.WARNING)}, "
f"INFO={logger.isEnabledFor(logging.INFO)}, "
f"DEBUG={logger.isEnabledFor(logging.DEBUG)}"
)
A naplózási szintek megegyeznek a normál naplózási kódtárszintekkel. Az alábbi táblázat az alábbi naplózási szintek általános használatát ismerteti a Pythonhoz készült Azure-kódtárakban:
Naplózási szint | Tipikus használat |
---|---|
fakitermelés. HIBA | Olyan hibák, amikor az alkalmazás nem valószínű, hogy helyreáll (például nincs memória). |
fakitermelés. FIGYELMEZTETÉS (alapértelmezett) | A függvények nem hajtják végre a kívánt feladatot (de nem akkor, amikor a függvény helyreállhat, például rest API-hívás újrapróbálkozása). A függvények általában figyelmeztetést naplóznak a kivételek emelésekor. A figyelmeztetési szint automatikusan engedélyezi a hibaszintet. |
logging.INFO | A függvény normálisan működik, vagy egy szolgáltatáshívás megszakad. Az információs események általában kéréseket, válaszokat és fejléceket tartalmaznak. Az információs szint automatikusan engedélyezi a hiba- és figyelmeztetési szinteket. |
fakitermelés. DEBUG | A hibaelhárításhoz gyakran használt részletes információk, valamint a kivételek veremkövetését is tartalmazzák. A hibakeresési szint automatikusan engedélyezi az információs, figyelmeztetési és hibaszinteket. FIGYELEM: Ha azt is beállítja logging_enable=True , a hibakeresési szint bizalmas információkat tartalmaz, például a fejlécekben lévő fiókkulcsokat és más hitelesítő adatokat. A biztonság veszélyeztetésének elkerülése érdekében mindenképpen védje ezeket a naplókat. |
fakitermelés. NOTSET | Tiltsa le az összes naplózást. |
Társpecifikus naplózási szint viselkedése
Az egyes szintek pontos naplózási viselkedése a szóban forgó kódtártól függ. Egyes kódtárak, például az azure.eventhub, széles körű naplózást végeznek, míg más kódtárak nem sokat tesznek.
A kódtárak pontos naplózásának vizsgálatához a legjobb módszer a naplózási szintek keresése a Pythonhoz készült Azure SDK forráskódjában:
Az adattár mappájában lépjen az sdk mappába, majd lépjen az adott szolgáltatáshoz tartozó mappába.
Ebben a mappában keresse meg a következő sztringek bármelyikét:
_LOGGER.error
_LOGGER.warning
_LOGGER.info
_LOGGER.debug
Naplóstream-kezelő regisztrálása
A naplózási kimenet rögzítéséhez regisztrálnia kell legalább egy naplóstream-kezelőt a kódban:
import logging
# Direct logging output to stdout. Without adding a handler,
# no logging output is visible.
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
Ez a példa regisztrál egy kezelőt, amely a naplókimenetet stdoutra irányítja. Használhat más típusú kezelőket is a Logging.handlersben leírtak szerint a Python dokumentációjában, vagy használhatja a standard logging.basicConfig metódust.
HTTP-naplózás engedélyezése ügyfélobjektumhoz vagy művelethez
Alapértelmezés szerint az Azure-kódtárakon belüli naplózás nem tartalmaz HTTP-információkat. Ha HTTP-adatokat szeretne hozzáadni a naplókimenethez, explicit módon át kell adnia logging_enable=True
egy ügyfél- vagy hitelesítőadat-objektumkonstruktornak vagy egy adott metódusnak.
Figyelemfelhívás
A HTTP-naplózás tartalmazhat bizalmas információkat, például a fejlécekben lévő fiókkulcsokat és más hitelesítő adatokat. A biztonság veszélyeztetésének elkerülése érdekében mindenképpen védje ezeket a naplókat.
HTTP-naplózás engedélyezése ügyfélobjektumhoz
from azure.storage.blob import BlobClient
from azure.identity import DefaultAzureCredential
# Enable HTTP logging on the client object when using DEBUG level
# endpoint is the Blob storage URL.
client = BlobClient(endpoint, DefaultAzureCredential(), logging_enable=True)
Az ügyfélobjektum HTTP-naplózásának engedélyezése lehetővé teszi az adott objektumon keresztül meghívott összes művelet naplózását.
HITELESÍTŐ ADATOK HTTP-naplózásának engedélyezése
from azure.storage.blob import BlobClient
from azure.identity import DefaultAzureCredential
# Enable HTTP logging on the credential object when using DEBUG level
credential = DefaultAzureCredential(logging_enable=True)
# endpoint is the Blob storage URL.
client = BlobClient(endpoint, credential)
A hitelesítő objektum HTTP-naplózásának engedélyezése lehetővé teszi az adott objektumon keresztül meghívott összes művelet naplózását, de nem olyan ügyfélobjektumokban végzett műveletek esetében, amelyek nem igényelnek hitelesítést.
Naplózás engedélyezése egyéni metódusokhoz
from azure.storage.blob import BlobClient
from azure.identity import DefaultAzureCredential
# endpoint is the Blob storage URL.
client = BlobClient(endpoint, DefaultAzureCredential())
# Enable HTTP logging for only this operation when using DEBUG level
client.create_container("container01", logging_enable=True)
Példa naplózási kimenetre
A következő kód jelenik meg a példában : Tárfiók használata a DEBUG és a HTTP naplózás engedélyezésével:
import logging
import os
import sys
import uuid
from azure.core import exceptions
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobClient
logger = logging.getLogger("azure")
logger.setLevel(logging.DEBUG)
# Set the logging level for the azure.storage.blob library
logger = logging.getLogger("azure.storage.blob")
logger.setLevel(logging.DEBUG)
# Direct logging output to stdout. Without adding a handler,
# no logging output is visible.
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
print(
f"Logger enabled for ERROR={logger.isEnabledFor(logging.ERROR)}, "
f"WARNING={logger.isEnabledFor(logging.WARNING)}, "
f"INFO={logger.isEnabledFor(logging.INFO)}, "
f"DEBUG={logger.isEnabledFor(logging.DEBUG)}"
)
try:
credential = DefaultAzureCredential()
storage_url = os.environ["AZURE_STORAGE_BLOB_URL"]
unique_str = str(uuid.uuid4())[0:5]
# Enable logging on the client object
blob_client = BlobClient(
storage_url,
container_name="blob-container-01",
blob_name=f"sample-blob-{unique_str}.txt",
credential=credential,
)
with open("./sample-source.txt", "rb") as data:
blob_client.upload_blob(data, logging_body=True, logging_enable=True)
except (
exceptions.ClientAuthenticationError,
exceptions.HttpResponseError
) as e:
print(e.message)
A kimenet a következő:
Logger enabled for ERROR=True, WARNING=True, INFO=True, DEBUG=True
Request URL: 'https://pythonazurestorage12345.blob.core.windows.net/blob-container-01/sample-blob-5588e.txt'
Request method: 'PUT'
Request headers:
'Content-Length': '77'
'x-ms-blob-type': 'BlockBlob'
'If-None-Match': '*'
'x-ms-version': '2023-11-03'
'Content-Type': 'application/octet-stream'
'Accept': 'application/xml'
'User-Agent': 'azsdk-python-storage-blob/12.19.0 Python/3.10.11 (Windows-10-10.0.22631-SP0)'
'x-ms-date': 'Fri, 19 Jan 2024 19:25:53 GMT'
'x-ms-client-request-id': '8f7b1b0b-b700-11ee-b391-782b46f5c56b'
'Authorization': '*****'
Request body:
b"Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob."
Response status: 201
Response headers:
'Content-Length': '0'
'Content-MD5': 'SUytm0872jZh+KYqtgjbTA=='
'Last-Modified': 'Fri, 19 Jan 2024 19:25:54 GMT'
'ETag': '"0x8DC1924749AE3C3"'
'Server': 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0'
'x-ms-request-id': '7ac499fa-601e-006d-3f0d-4bdf28000000'
'x-ms-client-request-id': '8f7b1b0b-b700-11ee-b391-782b46f5c56b'
'x-ms-version': '2023-11-03'
'x-ms-content-crc64': 'rtHLUlztgxc='
'x-ms-request-server-encrypted': 'true'
'Date': 'Fri, 19 Jan 2024 19:25:53 GMT'
Response content:
b''
Feljegyzés
Ha hitelesítési hibát kap, győződjön meg arról, hogy a futtatott identitás a "Storage Blob Data Contributor" szerepkörhöz van rendelve a blobtárolón. További információ: Blob Storage használata alkalmazáskódból (Jelszó nélküli lap).