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

Сервис Cloud Functions автоматически захватывает потоки стандартного вывода приложения и отправляет их в централизованную систему журналирования в Yandex Cloud. Кроме журналов выполнения приложения, ведутся системные записи о событиях при выполнении запроса.

Для записи дополнительных сообщений используются стандартные языковые конструкции:
1. `System.out.println` — выводит сообщение в стандартный поток вывода `stdout`.
1. `System.err.println` — выводит сообщение в стандартный поток ошибок `stderr`.
1. `Instant.now` + `Duration.between` (и другие способы) — возвращает продолжительность выполнения действия.

{% note info %}

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

{% endnote %}

Более подробно со спецификацией форматирования строк можно ознакомиться в [документации Java](https://docs.oracle.com/javase/tutorial/essential/io/formatting.html).

## Системные сообщения {#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` – время, потраченное на инициализацию среды выполнения и загрузку кода функции.