Показать сообщение отдельно
Старый 26.01.2012, 15:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Хороших вариантов оссобо нету т.как нужная информация, такая как, например, стек трейс отсутствует в релизном плеере. Но уж если что-то делать регулярными выражениями, так это именно стек трейс. Т.е. не нужно оборачивать каждую функцию в try-catch, это бессмысленно и беспощадно, т.как скорее всего нарушит логику программы, а даже если и нет, заставит ее выполнятся дольше.
Что да можно было бы сделать - первой строкой в каждой функции добавить имя функции на стек (можно даже с аргументами), а на каждом выходе (return, throw) из функции удалить ее со стека. И слушать UncaughtErrorEvent - при получении события - записать информацию которая в текущий момент была на стеке и обнулить стек. Единственная проблема - если есть функции которые ловят ошибки где-то гораздо выше по стеку - тогда прийдется в catch{} блоке искать сколько же именно убрать со стека (не сложно, но и не однострочник) - т.е. найти самое последнее вхождение названия текущей функции в "историю" хранящуюся на стеке.

Логгер, вне зависимости от реализации (я не вижу смысла делать его синглоном, например), вещь безусловно полезная. Но идея его использования заключается в том, чтобы писать внятные сообщения о том что произошло в программе - от того, что вы запишете, что случилась ошибка ясности это вам особо не прибавит. Традиционно сообщения в лог пишутся об ошибках которые программист предвидел. Например, не загрузились картинки - нет возможности запустить галерею картинок т.как показывать нечего и т.п.
__________________
Hell is the possibility of sanity