[Документация Yandex Cloud](../../../index.md) > [Yandex Cloud Functions](../../index.md) > [Разработка на Python](index.md) > Журналирование

# Журналирование выполнения функции на Python

Сервис Cloud Functions автоматически захватывает потоки стандартного вывода приложения на Python и отправляет их в централизованную [систему журналирования](../../operations/function/function-logs.md), доступную в Yandex Cloud. Помимо журналов выполнения приложения записываются системные записи о событиях выполнения запроса.

Для записи дополнительных сообщений используются стандартные языковые конструкции:
1. `print` — выводит сообщение в стандартный поток вывода `stdout`.
1. `logging` — выводит сообщение в установленном формате в выбранный поток вывода.

{% note info %}

Многострочные сообщения должны быть разделены символом `\r` (carriage return), но не `\n` (line feed). При использовании последнего каждая строка отправляется отдельным сообщением и отображается в журнале отдельно.

{% endnote %}

## Системные сообщения {#router-loggin}

В рамках обработки каждого вызова в журнал также записываются системные сообщения `START`, `END` и `REPORT`:

```text
START RequestID: <идентификатор_запроса> Version: <идентификатор_версии_функции>
END RequestID: <идентификатор_запроса>
REPORT RequestID: <идентификатор_запроса>
    Duration: 236.606 ms
    Billed Duration: 300 ms
    Memory Size: 128 MB
    Max Memory Used: 22 MB
    Queuing Duration: 0.027 ms
    Function Init Duration: 225.298 ms
```

Все строки содержат идентификатор запроса (`RequestID`), который генерируется автоматически в момент вызова функции.

Строка `REPORT` — это отчет о выполнении функции. Она содержит дополнительную информацию о потребленных ресурсах:
* `Duration` – время, затраченное на вызов функции. Включает в себя параметры `Queuing Duration` и `Function Init Duration`.
* `Billed Duration` – время, за которое взимается плата в соответствии с [правилами тарификации](../../pricing.md).
* `Memory Size` – объем памяти, указанный при создании версии, МБ.
* `Max Memory Used` – объем использованной памяти на момент начала выполнения запроса.
* `Queuing Duration` – время, которое запрос на выполнение провел во внутренней очереди. Если время растет, это может значить, что не хватает экземпляров функции. Максимальное количество экземпляров определяется [квотами](../../concepts/limits.md).
* `Function Init Duration` – время, потраченное на инициализацию среды выполнения и загрузку кода функции.

## Пользовательские сообщения {#user-logging}

Перед запуском функции Cloud Functions настраивает для [корневого логгера](https://docs.python.org/3/howto/logging.html#advanced-logging-tutorial):
* обработчик для записи логов в `stdout`;
* форматтер, который добавляет к сообщению время его создания, идентификатор запроса и уровень логирования.

{% note warning %}

Изменить настройки корневого логгера с помощью функции `logging.basicConfig()` нельзя.

{% endnote %}

По умолчанию уровень корневого логгера — `Warning`, все логи с уровнем ниже игнорируются. Изменить уровень логирования можно с помощью метода `setLevel` для:

* всего приложения.
  ```python
  logging.getLogger().setLevel(logging.DEBUG)
  ```
* любого логгера, кроме корневого.
  ```python
  logging.getLogger('requests.packages.urllib3').setLevel(logging.DEBUG)
  logging.getLogger('myapp').setLevel(logging.DEBUG)
  ```

Изменить формат логов можно так:

```python
root_handler = logging.getLogger().handlers[0]
root_handler.setFormatter(logging.Formatter(
	'[%(levelname)s]\t%(name)s\t%(request_id)s\t%(message)s\n'
))
```

В примере вместо времени создания сообщения выводится имя логгера.

Подробнее о настройках логирования читайте в [документации Python](https://docs.python.org/3/howto/logging.html#configuring-logging).