Logboekregistratie configureren in de Azure-bibliotheken voor Python

Azure-bibliotheken voor Python die zijn gebaseerd op azure.core bieden uitvoer van logboekregistratie met behulp van de standaardbibliotheek voor Python-logboekregistratie.

Het algemene proces voor het werken met logboekregistratie is als volgt:

  1. Verwerf het logboekregistratieobject voor de gewenste bibliotheek en stel het logboekregistratieniveau in.
  2. Registreer een handler voor de logboekregistratiestroom.
  3. Als u HTTP-informatie wilt opnemen, geeft u een logging_enable=True parameter door aan een clientobjectconstructor, een referentieobjectconstructor of aan een specifieke methode.

Details vindt u in de resterende secties van dit artikel.

Over het algemeen is het de beste resource om inzicht te krijgen in het gebruik van logboekregistratie in de bibliotheken door de SDK-broncode op github.com/Azure/azure-sdk-for-python. We raden u aan deze opslagplaats lokaal te klonen, zodat u eenvoudig naar details kunt zoeken wanneer dat nodig is, zoals in de volgende secties wordt voorgesteld.

Logboekregistratieniveaus instellen

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)
  • In dit voorbeeld wordt de logboekregistratie voor de azure.mgmt.resource bibliotheek verkregen en wordt vervolgens het logboekregistratieniveau ingesteld op logging.DEBUG.
  • U kunt op elk gewenst moment aanroepen logger.setLevel om het logboekregistratieniveau voor verschillende codesegmenten te wijzigen.

Als u een niveau voor een andere bibliotheek wilt instellen, gebruikt u de naam van die bibliotheek in de logging.getLogger aanroep. De azure-eventhubs-bibliotheek biedt bijvoorbeeld een logboekregistratie met de naam azure.eventhubs, de azure-storage-queue-bibliotheek biedt een logboekregistratie met de naam azure.storage.queue, enzovoort. (De SDK-broncode maakt vaak gebruik van de instructie logging.getLogger(__name__), die een logboekregistratie verkrijgt met behulp van de naam van de module die de inhoud bevat.)

U kunt ook meer algemene naamruimten gebruiken. Bijvoorbeeld:

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)

De azure logger wordt door sommige bibliotheken gebruikt in plaats van een specifieke logger. De azure-storage-blob-bibliotheek maakt bijvoorbeeld gebruik van de azure logger.

U kunt de logger.isEnabledFor methode gebruiken om te controleren of een bepaald niveau voor logboekregistratie is ingeschakeld:

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)}"
)

Logboekregistratieniveaus zijn hetzelfde als de standaardbibliotheekniveaus voor logboekregistratie. In de volgende tabel wordt het algemene gebruik van deze logboekregistratieniveaus in de Azure-bibliotheken voor Python beschreven:

Niveau van logboekregistratie Normaal gebruik
Logboekregistratie. FOUT Fouten waarbij de toepassing waarschijnlijk niet kan worden hersteld (zoals onvoldoende geheugen).
Logboekregistratie. WAARSCHUWING (standaard) Een functie kan de beoogde taak niet uitvoeren (maar niet wanneer de functie kan worden hersteld, zoals het opnieuw proberen van een REST API-aanroep). Functies registreren doorgaans een waarschuwing bij het genereren van uitzonderingen. Met het waarschuwingsniveau wordt het foutniveau automatisch ingeschakeld.
logging.INFO De functie werkt normaal of een service-aanroep wordt geannuleerd. Informatie-gebeurtenissen omvatten doorgaans aanvragen, antwoorden en headers. Het informatieniveau schakelt automatisch de fout- en waarschuwingsniveaus in.
Logboekregistratie. DEBUG Gedetailleerde informatie die vaak wordt gebruikt voor het oplossen van problemen en bevat een stacktracering voor uitzonderingen. Met het foutopsporingsniveau worden de informatie-, waarschuwings- en foutniveaus automatisch ingeschakeld. LET OP: Als u ook instelt logging_enable=True, bevat het foutopsporingsniveau gevoelige informatie, zoals accountsleutels in headers en andere referenties. Zorg ervoor dat u deze logboeken beveiligt om beveiliging te voorkomen.
Logboekregistratie. NOTSET Schakel alle logboekregistratie uit.

Gedrag op bibliotheekspecifiek logboekregistratieniveau

Het exacte gedrag van logboekregistratie op elk niveau is afhankelijk van de betreffende bibliotheek. Sommige bibliotheken, zoals azure.eventhub, voeren uitgebreide logboekregistratie uit, terwijl andere bibliotheken weinig doen.

De beste manier om de exacte logboekregistratie voor een bibliotheek te onderzoeken, is door te zoeken naar de logboekregistratieniveaus in de Azure SDK voor Python-broncode:

  1. Navigeer in de opslagplaatsmap naar de sdk-map en navigeer vervolgens naar de map voor de specifieke service van belang.

  2. Zoek in die map naar een van de volgende tekenreeksen:

    • _LOGGER.error
    • _LOGGER.warning
    • _LOGGER.info
    • _LOGGER.debug

Een logboekstream-handler registreren

Als u uitvoer van logboekregistratie wilt vastleggen, moet u ten minste één logboekstream-handler registreren in uw code:

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)

In dit voorbeeld wordt een handler geregistreerd waarmee logboekuitvoer naar stdout wordt omgegaan. U kunt andere typen handlers gebruiken, zoals beschreven in logging.handlers in de Python-documentatie of de standaardmethode logging.basicConfig gebruiken.

HTTP-logboekregistratie inschakelen voor een clientobject of -bewerking

Logboekregistratie in de Azure-bibliotheken bevat standaard geen HTTP-informatie. Als u HTTP-informatie wilt opnemen in logboekuitvoer (als FOUTOPSPORINGsniveau), moet u expliciet doorgeven logging_enable=True aan een client- of referentieobjectconstructor of aan een specifieke methode.

Let op

HTTP-logboekregistratie kan gevoelige informatie bevatten, zoals accountsleutels in headers en andere referenties. Zorg ervoor dat u deze logboeken beveiligt om beveiliging te voorkomen.

HTTP-logboekregistratie inschakelen voor een clientobject (FOUTOPSPORINGsniveau)

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)

Het inschakelen van HTTP-logboekregistratie voor een clientobject maakt logboekregistratie mogelijk voor alle bewerkingen die via dat object worden aangeroepen.

HTTP-logboekregistratie inschakelen voor een referentieobject (DEBUG-niveau)

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)

Het inschakelen van HTTP-logboekregistratie voor een referentieobject maakt logboekregistratie mogelijk voor alle bewerkingen die via dat object worden aangeroepen, maar niet voor bewerkingen in een clientobject waarvoor geen verificatie is vereist.

Logboekregistratie inschakelen voor een afzonderlijke methode (DEBUG-niveau)

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)

Voorbeeld van uitvoer van logboekregistratie

De volgende code is die wordt weergegeven in voorbeeld: Gebruik een opslagaccount met toevoeging van het inschakelen van DEBUG en HTTP-logboekregistratie:

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)

De uitvoer is als volgt:

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''

Notitie

Als u een autorisatiefout krijgt, controleert u of de identiteit die u uitvoert, de rol 'Inzender voor opslagblobgegevens' in uw blobcontainer is toegewezen. Zie Blob Storage gebruiken met verificatie voor meer informatie.