Народ, подскажите по такой проблеме.
Как получить stack trace ошибки из Managed Package.
Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!
Попытки сделать
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает
Все время возвращает External entry point(<package_prefix>).
Нашел такую идею отмеченную как решенная
https://success.salesforce.com/ideaview?id=08730000000GnJKAA0
Но что-то не понял что там за решение.
Как получить stack trace ошибки из Managed Package.
Смысл моей логики - запустить unmanaged code из managed package и получить ошибки если свалится!
Попытки сделать
- try/catch из unmanaged code - не работает.
- try/catch и возврат простым текстом внутри пакета - не работает
- даже просто попытка записать трейс ошибки в кастомный пакетный объект - не работает
Все время возвращает External entry point(<package_prefix>).
точно помню делал отсылку трейса на емаил. Логгер такой был кастомный.
В смысле ты все-таки получал stackTrace из Exception внутри пакета (чтобы потом вложить в письмо)?
Перелопатил кучу ресурсов и походу тут косяк. Нет никакой возможности получить trace ошибки кроме как использовать LMA. Мдя, странные эти разработчики SF, что они курят? В чем сложность сделать мааааааленькую галочку где-нибудь в настройках пакета.
Именно все так и было, была галочка в кастом сеттинге.
Может ты при отправке письма чего нибудь не сделал ?
Подожди, ты про какое письмо говоришь?
Я вообще еще никаких писем не отсылал.
Я пока не могу получить STACK TRACE чтобы с ним работать (отсылать в письмах, показывать на странице, сохранять в объект).
Или ты про какие-то стандартные письма говоришь?
Полностью кастомный функционал, из менадж пакета я получал stack trace о выполнении кода на продакшене, но в реальных условиях к нам приходили письма только когда чего нибудь падало у клиента. Эту тему здесь юзали уже сотни раз.
В кастом сеттинге была галочка нам нужен весь stack trace каждый раз или когда что то падает.
КАК????
У меня это не работает внутри пакета. У тебя работает?
try{
...
} catch(Exception e) {
sendByEmail(e.getStackTraceString())
}Раньше точно работало, проверь настройки емайла
Если есть пакет - есть LMA. Логинишься через лма и получаешь точно такие же ошибки как и при унманагед коде
Отсылка на емейл никогда не работает - только если через Subscribers залогиниться
Если LMA нет - просишьсуппорт поставить его на орг на каком соббираешь пакеты и пользуешься)
Я счас даже код логгера нашел,Это тема здесь юзалась очень много раз, можно даже не через емайлы а через http.
В нашем пакете есть такая же хрень
Максимум что приходит - если ты не через сабскрайберс зашел это
Attempt to null-reference - абсолютно бесполезная хрень
Мне самому лично нафиг не нужны ошибки - мне надо показывать ошибки пользователю.
Потому что я запускаю unmanaged code из managed package. И валится именно unmanaged code.
Это код самого пользователя - в пакете валиться нечему - там 1 строчка кода обернутая в try/catch.
Собственно LMA или login as Subscriber или emails нафиг не нужны. (хотя я все таки надеялся что Сергей косвенно как-то получает на руки stack trace чтобы вставить его в тело письма, но по ходу это не так).
На сколько я помню getStackTraceString() внутри managed package ничего дельного не возвращает, а вот getLineNumber() по-моему вернёт хотя бы строку
Да и вообще-то если это ошибка из unmanaged code то она прямиком должна попадать в логи в духе EXCEPTION_THROWN или как там.
Друзья, у меня случился крайний вывих мозга!!!
Совет Ильи (в очередной раз крайне полезный) сподвиг меня в очередной раз проверить как работает вывод ошибки.
Мля, и он вывел ошибку, причем со стеком, причем с стеком из пакета.
Я ничего не понимаю.
Вот как выглядит
вот код
SYSTEM.DEBUG('XXXXX - '+e.getMessage());
SYSTEM.DEBUG('XXXXX - '+e.getCause());
SYSTEM.DEBUG('XXXXX - '+e.getLineNumber());
SYSTEM.DEBUG('XXXXX - '+e.getTypeName());
SYSTEM.DEBUG('XXXXX - '+e.getStackTraceString());10:24:20.33 (108513568)|HEAP_ALLOCATE|[40]|Bytes:45
10:24:20.33 (108530428)|USER_DEBUG|[40]|DEBUG|XXXXX - Attempt to de-reference a null object
10:24:20.33 (108535434)|STATEMENT_EXECUTE|[41]
10:24:20.33 (108574763)|HEAP_ALLOCATE|[41]|Bytes:12
10:24:20.33 (108581531)|USER_DEBUG|[41]|DEBUG|XXXXX - null
10:24:20.33 (108584873)|STATEMENT_EXECUTE|[42]
10:24:20.33 (108599829)|HEAP_ALLOCATE|[42]|Bytes:8
10:24:20.33 (108611069)|HEAP_ALLOCATE|[42]|Bytes:2
10:24:20.33 (108617161)|HEAP_ALLOCATE|[42]|Bytes:10
10:24:20.33 (108622339)|USER_DEBUG|[42]|DEBUG|XXXXX - 38
10:24:20.33 (108625325)|STATEMENT_EXECUTE|[43]
10:24:20.33 (108637075)|HEAP_ALLOCATE|[43]|Bytes:27
10:24:20.33 (108642110)|HEAP_ALLOCATE|[43]|Bytes:35
10:24:20.33 (108646913)|USER_DEBUG|[43]|DEBUG|XXXXX - System.NullPointerException
10:24:20.33 (108649684)|STATEMENT_EXECUTE|[44]
10:24:20.33 (108681393)|HEAP_ALLOCATE|[44]|Bytes:166
10:24:20.33 (108687802)|HEAP_ALLOCATE|[44]|Bytes:174
10:24:20.33 (108693600)|USER_DEBUG|[44]|DEBUG|XXXXX -
Class.NG2DemoService.exec: line 38, column 1
External entry point
Class.ng2.GatewayService.exec: line 19, column 1
Class.ng2.GatewayController.init: line 15, column 1
10:24:20.33 (108697032)|STATEMENT_EXECUTE|[45]
10:24:20.33 (108705311)|METHOD_EXIT|[EXTERNAL]|01p6F000007dXqy|NG2DemoService.exec(String, Object)
10:24:20.33 (110501294)|DML_BEGIN|[31]|Op:Insert|Type:ng2__Log__c|Rows:1
10:24:20.33 (154825208)|DML_END|[31]
Вот чтобы не быть голословным - сам пакет логает в кастомный объект
как было когда я создавал тему
{"stack":"()\n\n\nExternal entry point\n(ng2)\n","error":"Attempt to de-reference a null object","input":{"data":{"objectTypes":["Account2"]},"method":"getObjectsMetadata","service":"NG2DemoService"}}{"stack":"Class.NG2DemoService.exec: line 38, column 1\nExternal entry point\nClass.ng2.GatewayService.exec: line 19, column 1\nClass.ng2.GatewayController.init: line 15, column 1","error":"Attempt to de-reference a null object","input":{"data":{},"method":"getRecords","service":"NG2DemoService"}}Я нихера не понимаю. НО это огромный такой луч надежды что не все потеряно!
Осталось только понять в чем жеж разница!
Я тебе про что говорил.
Ты мне говорил про то что вы отсылали ошибки из кастомного логера по email.
Но ты ничего не написал как вы ошибку (stacktrace) получали.
Правильно, я говорил что это в принципе возможно...
Возможно многое
Вопрос КАК
?
Можно и с Marc Benioff договориться - заплатить ему 1 000 000 $ - он тебе включит логи в пакете.
:))))
А вот и косяк обратно приплыл!!!
В коде ничего не менялось. Просто проект давно не трогал с последнего исследования данного вопроса.
Запуск и опять пустой stacktrace:
Гонял страницу, пересохранял страницы/контроллеры - ничего.
Открыл Developer Console - появился stacktrace в коде:

МИСТИКА.
Вот еще доказательства - логи с ошибками + время

Вот и думай, глюк это или фича и как оно должно работать в итоге.