Configurare la registrazione nelle librerie client di Azure SDK per JavaScript

Questo articolo illustra come configurare la registrazione nelle librerie di Azure SDK per JavaScript. L'abilitazione della registrazione consente di diagnosticare i problemi di autenticazione, risolvere i problemi relativi alle catene di credenziali e ottenere visibilità sulle operazioni dell'SDK.

Per abilitare la registrazione, è possibile usare una delle opzioni seguenti:

  • Imposta la AZURE_LOG_LEVEL=verbosevariabile d'ambiente per attivare il logging.
  • Usare il @azure/logger pacchetto nel codice sorgente.

I livelli di log validi includono verbose, infowarning, e error.

Annotazioni

Il codice di Archiviazione di Azure illustrato in questo articolo presuppone che la risorsa di archiviazione sia stata configurata con i ruoli Microsoft Entra appropriati. Altre informazioni: Autorizzare l'accesso ai BLOB usando Microsoft Entra ID.

Prerequisiti

Abilitare la registrazione con la variabile di ambiente

Avviare l'applicazione con la variabile di ambiente per un modo semplice per abilitare la registrazione.

AZURE_LOG_LEVEL=verbose node index.js

Impostare le variabili di ambiente

È anche possibile aggiungere variabili di ambiente a un .env file nella radice del progetto. Creare un file denominato .env e aggiungere il contenuto seguente.

AZURE_LOG_LEVEL=verbose
AZURE_CLIENT_ID=<YOUR_CLIENT_ID>
AZURE_STORAGE_ACCOUNT_NAME=<YOUR_STORAGE_ACCOUNT_NAME>
AZURE_STORAGE_CONTAINER_NAME=<YOUR_STORAGE_CONTAINER_NAME>

Abilitare la registrazione con il pacchetto logger nel codice sorgente

L'esempio di codice seguente usa il pacchetto @azure/logger per eseguire il debug delle librerie client di Azure SDK.

Configurare la registrazione per servizi specifici

Oltre a impostare un livello di log globale, è possibile configurare livelli di log diversi per servizi di Azure specifici direttamente nel codice:

// Import service-specific setLogLevel functions
import { setLogLevel as setIdentityLogLevel } from "@azure/identity";
import { setLogLevel as setStorageLogLevel } from "@azure/storage-blob";

// Set different log levels for different services
setIdentityLogLevel("verbose");  // Detailed logs for identity operations
setStorageLogLevel("warning");   // Only warnings and errors for storage operations

Questo approccio offre un controllo dettagliato sul livello di verbosità della registrazione quando si utilizzano più servizi Azure nella stessa applicazione.

  1. Creare index.js con il codice seguente.

    import {
        ChainedTokenCredential,
        ManagedIdentityCredential,
        AzureCliCredential
    } from "@azure/identity";
    import { BlobServiceClient } from "@azure/storage-blob";
    import { AzureLogger, setLogLevel } from "@azure/logger";
    
    // Check required environment variables
    if (!process.env.AZURE_STORAGE_ACCOUNT_NAME) {
        throw new Error("AZURE_STORAGE_ACCOUNT_NAME environment variable is required");
    }
    
    if (!process.env.AZURE_STORAGE_CONTAINER_NAME) {
        throw new Error("AZURE_STORAGE_CONTAINER_NAME environment variable is required");
    }
    
    // Client ID is optional and only used in production environments
    // No need to check for its existence
    
    // Turn on debugging for all Azure SDKs
    setLogLevel("verbose");
    
    // Configure the logger to use console.
    AzureLogger.log = (...args)=> {
        console.log(...args);
    };
    
    const credential = new ChainedTokenCredential(
        new ManagedIdentityCredential({ clientId: process.env.AZURE_CLIENT_ID }),
        new AzureCliCredential()
    );
    
    const blobServiceClient = new BlobServiceClient(
        `https://${process.env.AZURE_STORAGE_ACCOUNT_NAME}.blob.core.windows.net`,
        credential
    );
    // get container properties
    const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
    
    async function main() {
        try {
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            const error = err;
            console.error("Error retrieving container properties:", error.message);
            throw error;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    
  2. Creare il progetto e installare le dipendenze npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @azure/logger
    
  3. Accedere alla sottoscrizione di Azure nell'ambiente locale con l'interfaccia della riga di comando di Azure.

    az login
    
  4. Esegui l'app con un file delle variabili d'ambiente. L'opzione --env-file è stata introdotta in Node.js 20.6.0.

    node --env-file .env index.js
    
  5. Trova la credenziale valida nell'output. ChainedTokenCredential consente al codice di passare senza problemi tra i metodi di autenticazione, provare ManagedIdentityCredential prima (per ambienti di produzione come il servizio app di Azure) e quindi eseguire il fallback ( AzureCliCredential per lo sviluppo locale), con i log che mostrano le credenziali riuscite.

Prerequisiti

Abilitare la registrazione con la variabile di ambiente

Avviare l'applicazione con la variabile di ambiente per un modo semplice per abilitare la registrazione.

AZURE_LOG_LEVEL=verbose node index.js

Impostare le variabili di ambiente

È anche possibile aggiungere variabili di ambiente a un .env file nella radice del progetto. Creare un file denominato .env e aggiungere il contenuto seguente.

AZURE_LOG_LEVEL=verbose
AZURE_CLIENT_ID=<YOUR_CLIENT_ID>
AZURE_STORAGE_ACCOUNT_NAME=<YOUR_STORAGE_ACCOUNT_NAME>
AZURE_STORAGE_CONTAINER_NAME=<YOUR_STORAGE_CONTAINER_NAME>

Abilitare la registrazione con il pacchetto logger nel codice sorgente

L'esempio di codice seguente usa il pacchetto @azure/logger per eseguire il debug delle librerie client di Azure SDK.

Configurare la registrazione per servizi specifici

Oltre a impostare un livello di log globale, è possibile configurare livelli di log diversi per servizi di Azure specifici direttamente nel codice:

// Import service-specific setLogLevel functions
import { setLogLevel as setIdentityLogLevel } from "@azure/identity";
import { setLogLevel as setStorageLogLevel } from "@azure/storage-blob";

// Set different log levels for different services
setIdentityLogLevel("verbose");  // Detailed logs for identity operations
setStorageLogLevel("warning");   // Only warnings and errors for storage operations

Questo approccio offre un controllo dettagliato sul livello di dettaglio dei log quando si utilizzano più servizi Azure nella stessa applicazione.

  1. Creare index.ts con il codice seguente.

    import {
        ChainedTokenCredential,
        ManagedIdentityCredential,
        AzureCliCredential
    } from "@azure/identity";
    import { BlobServiceClient, ContainerGetPropertiesResponse } from "@azure/storage-blob";
    import { AzureLogger, setLogLevel } from "@azure/logger";
    
    // Check required environment variables
    if (!process.env.AZURE_STORAGE_ACCOUNT_NAME) {
        throw new Error("AZURE_STORAGE_ACCOUNT_NAME environment variable is required");
    }
    
    if (!process.env.AZURE_STORAGE_CONTAINER_NAME) {
        throw new Error("AZURE_STORAGE_CONTAINER_NAME environment variable is required");
    }
    
    // Client ID is optional and only used in production environments
    // No need to check for its existence
    
    // Turn on debugging for all Azure SDKs
    setLogLevel("verbose");
    
    // Configure the logger to use console.log with TypeScript type safety
    AzureLogger.log = (...args: unknown[]): void => {
        console.log(...args);
    };
    
    const credential = new ChainedTokenCredential(
        new ManagedIdentityCredential({ clientId: process.env.AZURE_CLIENT_ID }),
        new AzureCliCredential()
    );
    
    const blobServiceClient = new BlobServiceClient(
        `https://${process.env.AZURE_STORAGE_ACCOUNT_NAME}.blob.core.windows.net`,
        credential
    );
    // get container properties
    const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
    
    async function main(): Promise<void> {
        try {
            const properties: ContainerGetPropertiesResponse = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            const error = err as Error;
            console.error("Error retrieving container properties:", error.message);
            throw error;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    
  2. Creare il progetto e installare le dipendenze npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @types/node @azure/logger
    
  3. Accedere alla sottoscrizione di Azure nell'ambiente locale con l'interfaccia della riga di comando di Azure.

    az login
    
  4. Compilare l'applicazione.

    tsc
    
  5. Esegui l'app con un file delle variabili d'ambiente. L'opzione --env-file è stata introdotta in Node.js 20.6.0.

    node --env-file .env index.js
    
  6. Trovare le credenziali riuscite nell'output: ChainedTokenCredential consente al codice di passare senza problemi tra metodi di autenticazione, provare prima ManagedIdentityCredential (per ambienti di produzione come il servizio app di Azure) e quindi eseguire il fallback a AzureCliCredential (per lo sviluppo locale), con i log che mostrano le credenziali riuscite.

Risorse aggiuntive