Настройка ведения журнала в клиентских библиотеках пакета SDK Azure для JavaScript

В этой статье объясняется, как настроить ведение журнала в библиотеках пакета SDK Azure для JavaScript. Включение ведения журнала помогает диагностировать проблемы с проверкой подлинности, устранять неполадки с цепочками учетных данных и получать видимость операций пакета SDK.

Чтобы включить ведение журнала, можно использовать любой из следующих вариантов:

  • AZURE_LOG_LEVEL=verbose Задайте переменную среды для включения ведения журнала.
  • Используйте @azure/logger пакет в исходном коде.

Допустимые уровни журнала включают verbose, info, warning и error.

Замечание

Код службы хранилища Azure, показанный в этой статье, предполагает, что ресурс хранилища настроен с соответствующими ролями Microsoft Entra. Дополнительные сведения: авторизация доступа к blob-объектам с помощью идентификатора Microsoft Entra.

Предпосылки

  • Подписка Azure. Создание бесплатной подписки
  • Node.js LTS
  • Необязательное средство разработчика, например Azure CLI , используемое для проверки подлинности в локальной среде разработки. Чтобы создать необходимый контекст, войдите с помощью Azure CLI.

Включение журналирования с помощью переменной среды

Запустите приложение с переменной среды для простого способа включения ведения журнала.

AZURE_LOG_LEVEL=verbose node index.js

Настройка переменных среды

Можно также добавить переменные среды в файл в корневом .env каталоге проекта. Создайте файл с именем .env и добавьте следующее содержимое.

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>

Включить журналирование с помощью пакета logger в исходном коде

В следующем примере кода пакет @azure/logger используется для отладки клиентских библиотек Azure SDK.

Настройка ведения журнала для определенных служб

Помимо настройки глобального уровня журнала, можно настроить различные уровни журналов для определенных служб Azure непосредственно в коде:

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

Этот подход обеспечивает детальный контроль над уровнем подробности журналирования при работе с несколькими службами Azure в одном приложении.

  1. Создайте index.js с помощью следующего кода.

    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. Создайте проект и установите зависимости npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @azure/logger
    
  3. Войдите в подписку Azure в локальной среде с помощью Azure CLI.

    az login
    
  4. Запустите приложение с файлом переменной среды. Этот --env-file параметр был представлен в Node.js 20.6.0.

    node --env-file .env index.js
    
  5. Найдите в выводе учетные данные, использованные для успешной аутентификации. ChainedTokenCredential позволяет коду легко переключаться между методами проверки подлинности, сначала пытаться ManagedIdentityCredential (для рабочих сред, таких как Служба приложений Azure), а затем вернуться к AzureCliCredential (для локальной разработки) с журналами, показывающими, какие учетные данные выполнены успешно.

Предпосылки

  • Подписка Azure. Создание бесплатной подписки
  • Node.js LTS
  • TypeScript
  • Необязательно, средство проверки подлинности, например Azure CLI , используемое для проверки подлинности в локальной среде разработки. Чтобы создать необходимый контекст, войдите с помощью Azure CLI.

Включите журналирование с помощью переменной среды

Запустите приложение с переменной среды для простого способа включения ведения журнала.

AZURE_LOG_LEVEL=verbose node index.js

Настройка переменных среды

Можно также добавить переменные среды в файл в корневом .env каталоге проекта. Создайте файл с именем .env и добавьте следующее содержимое.

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>

Включить ведение журнала с помощью пакета logger в исходном коде

В следующем примере кода используется пакет @azure/logger для отладки клиентских библиотек Azure SDK.

Настройка ведения журнала для определенных служб

Помимо настройки глобального уровня журнала, можно настроить различные уровни журналов для определенных служб Azure непосредственно в коде:

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

Этот подход позволяет гибко управлять уровнем детализации журналирования при работе с несколькими службами Azure в одном приложении.

  1. Создайте index.ts с помощью следующего кода.

    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. Создайте проект и установите зависимости npm.

    npm init -y
    npm pkg set type=module
    npm install @azure/identity @azure/storage-blob @types/node @azure/logger
    
  3. Войдите в подписку Azure в локальной среде с помощью Azure CLI.

    az login
    
  4. Создайте приложение.

    tsc
    
  5. Запустите приложение с файлом переменной среды. Этот --env-file параметр был представлен в Node.js 20.6.0.

    node --env-file .env index.js
    
  6. Найдите в выводе учетные данные, которые были успешно использованы: ChainedTokenCredential позволяет вашему коду плавно переключаться между методами проверки подлинности, сначала пытаясь использовать ManagedIdentityCredential (для промышленных сред, таких как Служба приложений Azure), а затем переключаясь на AzureCliCredential (для локальной разработки), при этом журналы показывают, какие учетные данные были успешно использованы.

Дополнительные ресурсы