https://kotlinlang.org logo
#russian
Title
# russian
l

lewik

06/14/2018, 6:38 PM
Существует ли возможность получиться имя файла и номер строки?) Для целей логирования. Для jvm/js/common. Как FILE в том же php. Я правда, почти уверен что после компиляции это теряется, но вдруг есть хитрый способ? Хочется сделать логгер крутым, без необходимости создания переменной. Может можно читать со стактрейса?
c

caffeine

06/15/2018, 12:06 AM
Решения я не дам. Но для JS сам делаю так: сделал объект логирования, а функции
info
,
warning
и т.п. сделал inline. А уже внутри этих функций я вывожу лог. В итоге в консоле сам браузер указывает на нужное место вывода лога. Мне в целом помогает такой вариант. Было бы конечно здорово, если был бы некий предпроцессор, в котором можно как-то дополнительно обрабатывать какие-то вещи. То есть, например скомпилиные в jvm байт-код классы можно подредактировать с помощью библиотеки ASM. Вот было бы здорово если бы на каком-то этапе компиляции можно было бы вмешаться. например. объявляем некую переменную, например
__FILE__
. И используем ее в нужном нам месте. Далее в предпроцессоре
__FILE__
заменяем на имя файла. В итоге в JS уже попадает нужное нам.
l

lex

06/15/2018, 4:28 AM
@snijsure с каким фреймворком на клиенте используете котлин? vue?
l

lewik

06/15/2018, 9:48 AM
А как запоминаются номера строк для вывода в стактрейс уже скомпилированного приложения?
w

whalemare

06/16/2018, 7:05 AM
Посмотри как реализован Timber. Там используется методика которая тебе нужна
l

lewik

06/16/2018, 7:26 AM
@whalemare это надстройка над Log андроида, если я все правильно понял. Сам тимбер не вычисляет файл и строку
@lex вы наверно не тому адресовали вопрос. Вероятно имели ввиду @caffeine. Насколько мне известно, он не использует фреймворки на фронте
l

lex

06/16/2018, 7:29 AM
Да, промахнулся
l

lewik

06/16/2018, 7:31 AM
Вообще, мне кажется, что получить файл и строку кроссплатформенно получится только написав плагин к компилятору.
Но, я понятия не имею как это сделать и groovy (как и gradle) для меня выглядят как магическое нечто с совершенно непонятным синтаксисом
l

lex

06/16/2018, 7:33 AM
@lewik номера строк сохраняются в метаинформации на уровне байткода jvm, оттуда они попадают в стектрейс. В js отображаются номера строк в загруженом в браузер скрипте
l

lewik

06/16/2018, 7:34 AM
@lex но хочется номера строк именно файла котлина. И с inline, как я понимаю такое уже не прокатывает
l

lex

06/16/2018, 7:36 AM
На счет плагина, то только для js, для jvm и так все ок. Для js кстати еще не факт что компилятор поддерживает плагины, надо спрашивать у кого то из команды jetbrains
l

lewik

06/16/2018, 7:37 AM
@lex разве инлайны в jvm строки не сбивают ?
l

lex

06/16/2018, 7:38 AM
Собъют, но я не представляю кейса логгировать внутри инлайна
c

caffeine

07/17/2018, 6:42 PM
inline применительно к логированию в рамках JVM не имеет смысла т.к. в JVM можно получить stacktrace. В JS такая фишка не прокатит. По поводу плагина, на сколько мне известно, в будущем в JB хотели сделать общедоступную возможность писать плагины для компилятора. Эдакий постпроцессор AST. Но пока эта возможность закрыта, т.к. для написания плагинов используется приватное API. Вообще плагины как таковые есть: https://kotlinlang.org/docs/reference/compiler-plugins.html
https://habr.com/company/redmadrobot/blog/351516/ я так понимаю, что BE IR - будет той частью, где плагин может что-то менять
4 Views