Compartilhar via


Configurar o registro nas bibliotecas de cliente do SDK do Azure para JavaScript

Este artigo explica como configurar o log em bibliotecas do SDK do Azure para JavaScript. Habilitar o registro em log ajuda você a diagnosticar problemas de autenticação, solucionar problemas de cadeias de credenciais e obter visibilidade das operações do SDK.

Para ativar o registro em log, você pode usar qualquer uma das opções abaixo:

  • Defina a variável de ambiente AZURE_LOG_LEVEL=verbose para habilitar o logging.
  • Use o pacote @azure/logger no código-fonte.

Os níveis de log válidos incluem verbose, infoe warningerror.

Observação

O código do Armazenamento do Azure mostrado neste artigo pressupõe que o recurso de armazenamento foi configurado com as funções apropriadas do Microsoft Entra. Saiba mais: Autorizar o acesso a blobs usando o Microsoft Entra ID.

Pré-requisitos

  • Uma assinatura do Azure: criar uma gratuitamente
  • Node.js LTS
  • Opcional, uma ferramenta de desenvolvedor como a CLI do Azure usada para autenticação em um ambiente de desenvolvimento local. Para criar o contexto necessário, entre com a CLI do Azure.

Habilitar o registro em log com variável de ambiente

Inicie o aplicativo com a variável de ambiente para uma maneira simples de habilitar o registro em log.

AZURE_LOG_LEVEL=verbose node index.js

Definir variáveis de ambiente

Você também pode adicionar variáveis de ambiente a um .env arquivo na raiz do projeto. Crie um arquivo nomeado .env e adicione o conteúdo a seguir.

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>

Habilitar o log com o pacote de registro no código-fonte

O exemplo de código a seguir usa o pacote @azure/logger para depurar as bibliotecas de clientes do SDK do Azure.

Configurar o registro em log para determinados serviços

Além de definir um nível de log global, você pode configurar diferentes níveis de log para serviços específicos do Azure diretamente em seu código:

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

Essa abordagem fornece controle granular sobre o nível de detalhamento dos logs ao trabalhar com vários serviços do Azure no mesmo aplicativo.

  1. Crie index.js com o código a seguir.

    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. Crie o projeto e instale as dependências do npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @azure/logger
    
  3. Entre em sua assinatura do Azure em seu ambiente local com a CLI do Azure.

    az login
    
  4. Execute o aplicativo com um arquivo de variável de ambiente. A --env-file opção foi introduzida no Node.js 20.6.0.

    node --env-file .env index.js
    
  5. Localize a credencial bem-sucedida na saída. ChainedTokenCredential permite que seu código alterne perfeitamente entre métodos de autenticação, primeiro tentando ManagedIdentityCredential (para ambientes de produção como o Serviço de Aplicativo do Azure) e, em seguida, voltando para AzureCliCredential (para desenvolvimento local), com logs mostrando qual credencial foi bem-sucedida.

Pré-requisitos

Habilitar o registro em log com variável de ambiente

Inicie o aplicativo com a variável de ambiente para uma maneira simples de habilitar o registro em log.

AZURE_LOG_LEVEL=verbose node index.js

Definir variáveis de ambiente

Você também pode adicionar variáveis de ambiente a um .env arquivo na raiz do projeto. Crie um arquivo nomeado .env e adicione o conteúdo a seguir.

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>

Habilitar o log com o pacote de registro no código-fonte

O exemplo de código a seguir usa o pacote @azure/logger para depurar as bibliotecas de clientes do SDK do Azure.

Configurar o registro em log para determinados serviços

Além de definir um nível de log global, você pode configurar diferentes níveis de log para serviços específicos do Azure diretamente em seu código:

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

Essa abordagem fornece controle granular sobre o nível de detalhamento dos logs ao trabalhar com vários serviços do Azure no mesmo aplicativo.

  1. Crie index.ts com o código a seguir.

    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. Crie o projeto e instale as dependências do npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @types/node @azure/logger
    
  3. Entre em sua assinatura do Azure em seu ambiente local com a CLI do Azure.

    az login
    
  4. Compile o aplicativo.

    tsc
    
  5. Execute o aplicativo com um arquivo de variável de ambiente. A --env-file opção foi introduzida no Node.js 20.6.0.

    node --env-file .env index.js
    
  6. Encontre a credencial bem-sucedida na saída - O ChainedTokenCredential permite que seu código alterne perfeitamente entre métodos de autenticação, primeiro tentando ManagedIdentityCredential (para ambientes de produção, como o Serviço de Aplicativos do Azure), e depois caindo para AzureCliCredential (para desenvolvimento local), com os logs mostrando qual credencial foi bem-sucedida.

Recursos adicionais