Логгирование обмена заказов в 1с-Битрикс

Часто возникает задача просмотра xml файла заказов, которые отдает Битрикс при обмене с 1с.
Физически компонент обмена нигде не записывает эти файлы, а отдает сразу в консоль оператором echo, поэтому на стороне сайта это никак не отследить.

Для обмена с товарным каталогом есть возможность логгирования установкой константы BX_CATALOG_IMPORT_1C_PRESERVE.

define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

При этом в папке /upload/ (если точнее в папке, которая указана в настройках главного модуля «Папка по умолчанию для загрузки файлов»)
будут создаваться папки с названием 1c_catalog0, 1c_catalog1 и т.д. с файлами обмена.

Т.к. файлы обмена могут быть достаточно большими, то нужно использовать это с осторожностью и только в целях диагностики, т.к. можно забить все место на диске.

Для обмена заказами такой трюк не проходит и поэтому нужно править код компонента bitrix:sale.export.1c.

Для этого в файле компонента /bitrix/components/bitrix/sale.export.1c/component.php нужно вставить перед
echo $contents;
(примерно 815 строка, сделать поиск по тексту) примерно следующий код

if ($_GET["mode"] == "query" || $_POST["mode"] == "query") {
    $logFile = $_SERVER["DOCUMENT_ROOT"] . '/logs/1c_exchange/sale-query-' . date('Y-m-d-H-i') . '.xml';
    file_put_contents($logFile, $contents . "\n", FILE_APPEND);
    file_put_contents($logFile, '\n", FILE_APPEND);
}

Данные, которые необходимо залоггировать, при необходимости можно указать свои.

Папку логов /logs/1c_exchange/ нужно создать самостоятельно. В файлы логов будет записываться содержимое файлов обмена, а также фильтр по заказам в xml комментарии.

Надо помнить, что мы меняем компонент, который входит в ядро Битрикса. Изменения, которые мы внесли, могут быть перезаписаны при обновлении Битрикса.

Файлы обменов заказами как правильно небольшие и не смогут быстро забить место на диске. Но обмен может проходить достаточно интенсивно, например каждую минуту, поэтому таких файлом может быть много. Лучше не оставлять функционал логгирования надолго и пользоваться только в период диагностики.