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

Код логера

\Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnBeforeProductUpdate',
    ['\OlegproLogCatalogHandler', 'OnBeforeProductUpdate']
);
 
\Bitrix\Main\EventManager::getInstance()->addEventHandler('catalog', 'OnProductUpdate',
    ['\OlegproLogCatalogHandler', 'OnProductUpdate']
);
 
 
class OlegproLogCatalogHandler
{
    private static $beforeProduct = null;
 
    public static function OnBeforeProductUpdate($ID, $arFields)
    {
        if (
            is_array($arFields)
            && array_key_exists('QUANTITY', $arFields)
            && \Bitrix\Main\Loader::includeModule('catalog')
            && ($product = \CCatalogProduct::GetByID($ID))
            && is_array($product)
        ) {
            self::$beforeProduct = $product;
 
            self::$beforeProduct['ID'] = $ID;
        }
 
    }
 
 
    public static function OnProductUpdate($ID, $arFields)
    {
        if (
            is_array(self::$beforeProduct)
            && self::$beforeProduct['ID'] == $ID
            && is_array($arFields)
            && array_key_exists('QUANTITY', $arFields)
            && $arFields['QUANTITY'] != self::$beforeProduct['QUANTITY']
        ) {
 
            global $USER;
 
            if ((is_object($USER) && $USER instanceof \CUser)) {
                $USER = new \CUser();
            }
 
            $msg = [
                '$ID' => $ID,
                '$arFields old' => self::$beforeProduct,
                '$arFields' => $arFields,
                '$_SERVER' => $_SERVER,
                '$_GET' => $_GET,
                '$_POST' => $_POST,
                'debug_backtrace' => \Bitrix\Main\Diag\Helper::getBackTrace(),
            ];
 
            $var = 'OnProductUpdate';
 
            \Bitrix\Main\Diag\Debug::writeToFile(
                sprintf(
                    "%s. User: %s [%d]\n%s",
                    date('d-m-Y H:i:s'),
                    $USER->GetLogin(),
                    $USER->GetID(),
                    (is_array($msg) ? print_r($msg, true) : $msg)
                ),
                $var,
                sprintf(
                    '.logs/%s-catalog-handler.txt',
                    \Bitrix\Main\Application::getInstance()->getContext()->getServer()->getHttpHost()
                )
            );
 
        }
 
        if (self::$beforeProduct !== null) {
            self::$beforeProduct = null;
        }
 
    }
 
}

Папка /.logs/ должна существовать и доступна для записи пользователю, под который запущен php.

Например я им отлавливал странную активацию товара в каталоге. Клиент утверждал, что количество у товара точно было 0 и он его не добавлял. Но при этом пользователи умудрялись его купить.