Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Обзор
    • Создание функции
      • Обзор
      • Node.js
      • Python
      • Go
      • PHP
      • Bash
      • Java
  • Пошаговые инструкции
    • Все инструкции
    • Получение IAM-токена сервисного аккаунта с помощью функции
    • Подключение к управляемым БД из функции
    • Получение информации о функции
      • Получить список функций
      • Получить список версий функции
      • Получить информацию о функции
      • Получить информацию о версии функции
    • Управление правами доступа к функции
      • Сделать функцию публичной
      • Сделать функцию приватной
      • Посмотреть роли, назначенные на функцию
      • Назначить роли на функцию
      • Отозвать роли, назначенные на функцию
    • Создание функции
      • Создать функцию
      • Создать версию функции
    • Вызов функции
      • Вызвать функцию
      • Аутентифицироваться при вызове приватной функции через HTTPS
    • Управление функцией
      • Изменить функцию
        • Изменить имя
        • Изменить описание
      • Масштабировать функцию
        • Посмотреть настройки масштабирования
        • Добавить настройки масштабирования
        • Удалить настройки масштабирования
      • Добавить переменные окружения
      • Указать облачную сеть
      • Передать секреты Yandex Lockbox
      • Управлять тегами
        • Добавить тег
        • Удалить тег
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Управлять логами
        • Посмотреть логи
        • Записать логи
      • Удалить функцию
    • Получение информации о триггере
      • Получить список триггеров
      • Получить информацию о триггере
    • Создание триггера
      • Создать таймер
      • Создать триггер для Message Queue
      • Создать триггер для Object Storage
      • Создать триггер для Container Registry
      • Создать триггер для Cloud Logs
      • Создать триггер для Cloud Logging
      • Создать триггер для Yandex IoT Core
      • Создать триггер для бюджетов
      • Создать триггер для Data Streams
      • Создать триггер для почты
    • Управление триггером
      • Изменить триггер
        • Изменить имя
        • Изменить описание
      • Управлять метками
        • Добавить метку
        • Изменить метку
        • Удалить метку
      • Посмотреть графики мониторинга
      • Удалить триггер
  • Концепции
    • Обзор
    • Функция
    • Вызов функции
    • Сетевое взаимодействие
    • Среда выполнения
      • Обзор
      • Окружение
      • Контекст выполнения
      • Предзагружаемая среда выполнения
    • Сборщик
    • Триггер
      • Обзор
      • Таймер
      • Триггер для Message Queue
      • Триггер для Object Storage
      • Триггер для Container Registry
      • Триггер для Cloud Logs
      • Триггер для Cloud Logging
      • Триггер для Yandex IoT Core
      • Триггер для бюджетов
      • Триггер для Data Streams
      • Триггер для почты
    • Dead Letter Queue
    • Логи функции
    • Резервное копирование
    • Квоты и лимиты
  • Разработка на Node.js
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Python
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Go
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на PHP
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на Bash
    • Обзор
    • Обработчик запросов
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на Java
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
      • Класс HttpServlet
      • Spring Boot
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Разработка на R
    • Обзор
    • Модель программирования
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
  • Разработка на C#
    • Обзор
    • Модель программирования
      • Обзор
      • Интерфейс Function
      • Интерфейс YcFunction
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Практические руководства
    • Все практические руководства
    • Создание навыка Алисы
    • Развертывание веб-приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Запись данных с устройства в Managed Service for PostgreSQL
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Подключение к базе данных YDB из функции на Python
    • Подключение к базе данных YDB из функции на Node.js
    • Конвертация видео в GIF на Python
    • Создание функции Node.js с помощью TypeScript
    • Разработка пользовательской интеграции
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Правила тарификации
  • Управление доступом
  • Справочник API Functions
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • FunctionService
      • OperationService
    • REST (англ.)
      • Overview
      • Function
        • Overview
        • create
        • createVersion
        • delete
        • get
        • getVersion
        • getVersionByTag
        • list
        • listAccessBindings
        • listOperations
        • listRuntimes
        • listScalingPolicies
        • listTagHistory
        • listVersions
        • removeScalingPolicy
        • removeTag
        • setAccessBindings
        • setScalingPolicy
        • setTag
        • update
        • updateAccessBindings
  • Справочник API Triggers
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • TriggerService
      • OperationService
    • REST (англ.)
      • Overview
      • Trigger
        • Overview
        • create
        • delete
        • get
        • list
        • listOperations
        • pause
        • resume
        • update
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Управление функцией
  3. Управлять логами
  4. Записать логи

Записать логи в журнал выполнения функции

Статья создана
Yandex Cloud
  • Примеры функций

Кроме текстовых записей, в стандартный поток вывода (stdout) и стандартный поток вывода ошибок (stderr) можно писать структурированные логи.

Примеры функций

Python
Go
Java

requirements.txt

python-json-logger==2.0.4

index.py

import logging
from pythonjsonlogger import jsonlogger


class YcLoggingFormatter(jsonlogger.JsonFormatter):
    def add_fields(self, log_record, record, message_dict):
        super(YcLoggingFormatter, self).add_fields(log_record, record, message_dict)
        log_record['logger'] = record.name
        log_record['level'] = str.replace(str.replace(record.levelname, "WARNING", "WARN"), "CRITICAL", "FATAL")


def handler(event, context):
    logHandler = logging.StreamHandler()
    logHandler.setFormatter(YcLoggingFormatter('%(message)s %(level)s %(logger)s'))

    logger = logging.getLogger('MyLogger')
    logger.propagate = False
    logger.addHandler(logHandler)
    logger.setLevel(logging.DEBUG)

    logger.info("My log message", extra={"my-key": "my-value"})
    
    return "Hello, world!"

index.go

package main

import (
    "context"
    "go.uber.org/zap"
)

type Response struct {
    StatusCode int         `json:"statusCode"`
    Body       interface{} `json:"body"`
}

func Handler(ctx context.Context) (*Response, error) {
    config := zap.NewProductionConfig()
    config.DisableCaller = true
    config.Level.SetLevel(zap.DebugLevel)
    logger, _ := config.Build()
    defer logger.Sync()

    logger.Info(
        "My log message",
        zap.String("my-key", "my-value"),
    )

    return &Response{
        StatusCode: 200,
        Body:       "Hello, world!",
    }, nil
}

pom.xml

...
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.19.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-layout-template-json</artifactId>
    <version>2.19.0</version>
</dependency>
...

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <JsonTemplateLayout eventTemplateUri="classpath:YcLoggingLayout.json"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="TRACE">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

YcLoggingLayout.json

{
  "message": {
    "$resolver": "message",
    "stringified": true
  },
  "level": {
    "$resolver": "level",
    "field": "name"
  },
  "logger": {
    "$resolver": "logger",
    "field": "name"
  },
  "labels": {
    "$resolver": "mdc",
    "flatten": true,
    "stringified": true
  },
  "tags": {
    "$resolver": "ndc"
  }
}

Handler.java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

import java.util.function.Function;

public class Handler implements Function<String, String> {

    private static final Logger logger = LogManager.getLogger();

    @Override
    public String apply(String s) {
        ThreadContext.put("my-key", "my-value");
        logger.info("My log message");
        ThreadContext.clearAll();
        return "Hello, world!";
    }
}

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»