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

aleksey.tomin

06/10/2020, 4:58 AM
Не совсем по теме, но... Правильно ли я понимаю, что если использовать любой логер, пишущий метод в лог, обязательно вызывает создание Throwable и потрошение его стектрейса? Например logback Причём это (очень небыстрая) операция идёт синхронно- иначе никак... В kotlin всё так же? StackWalker не используется нигде?
a

altavir

06/10/2020, 5:56 AM
Ну логгер и генерация ошибок - это как бы не напрямую связанная штука. Для JVM используюстя логгеры из Java, так что если там это делается быстро, то и в котлин будет быстро.
a

aleksey.tomin

06/11/2020, 5:16 AM
Именно напрямую. Чтобы записать в лог вызываемый метод нужно создать исключение и взять из него стектрейс. Я ссылку приводил - строка 280. Так это делается в logback.
a

altavir

06/11/2020, 5:19 AM
Апи логгера получаетс инстанс Throwable. Что он там с ним делает - это детали его внутренней реализации. В зависимости от того, какой фреймворк вы используете, результат будет разный. По-умолчанию обычно используют slf4j, но это спецификация, а не реализация. Поставляйте какой хотите.
a

aleksey.tomin

06/11/2020, 5:22 AM
Вы не понимаете. Чтобы написать в логах метод откуда вызвано логирование, надо создать Throwable. При этом заполняется stacktrace. На каждом вызове лога. Каждый (сработавший) logger.info(…) - это сбор полного стектрейса. https://habr.com/ru/company/jugru/blog/324932/ - это миллисекунда примерно.
a

altavir

06/11/2020, 5:23 AM
Понял теперь. Но опять же, деталь реалзиации. slf4j сам по себе это не делает
a

aleksey.tomin

06/11/2020, 5:24 AM
Конечно- это делает logback/log4j/все. Вопрос- кто-нибудь (например в kotlin) перешёл на StackWalker? Кстати, про 1мс я ошибся- в той же статье есть примеры на десятки мс (если стектрейс большой- привет спрингу/EE и AOP)
a

altavir

06/11/2020, 5:26 AM
Мой мысль в том, что котлин почти везде использует обертки над готовыми решениями из Java. Можно @lewik спросить
l

lewik

06/11/2020, 6:03 AM
Сам не знаю. В моем логгере используется slf4j
a

aleksey.tomin

06/11/2020, 6:05 AM
А что за “мой логгер“? А то я kotlin-logging по native пока допиливаю, но может зря
a

altavir

06/11/2020, 6:08 AM
Kotlin-logging хорошая штука.
l

lewik

06/11/2020, 6:09 AM
"мой логгер" https://github.com/Lewik/klog
Он конечно же, не совсем мой) Просто kotlin-logging долго не был мультиплатформенным.
a

aleksey.tomin

06/11/2020, 6:12 AM
А он Native поддерживает?
l

lewik

06/11/2020, 6:12 AM
Нет, надо допиливать.
Я думаю это просто что в kotlin-logging что в klog
a

aleksey.tomin

06/11/2020, 6:16 AM
В вашем попроще. Только надо 1.4 дождаться, чтобы 3 раза не дублировать код.
Но проблема с получение строки та же самая, конечно. Видимо вежде так.
l

lewik

06/11/2020, 6:17 AM
Несли я правильно понимаю, обычно logback используется?
a

aleksey.tomin

06/11/2020, 6:19 AM
Да На самом деле я написал это не потому, что нашёл проблемы перформанса, а потому, что стал писать KN-ветку для kotlin-logging и дошёл до этапа “получить метод, откуда вызван лог“. И задумался 🙂
l

lewik

06/11/2020, 6:20 AM
Я думал они это не сами считают...
a

aleksey.tomin

06/11/2020, 6:24 AM
“Они” это кто?
l

lewik

06/11/2020, 6:25 AM
"Конкуренты" из kotlin-logging))) а зачем им это?
a

aleksey.tomin

06/11/2020, 6:28 AM
Что “это“? Они тоже slf4j берут в JDK, но в native мне над самому делать- вот и полез читать исходники logback
l

lewik

06/11/2020, 6:30 AM
В js я ограничился только именем класса. Без метода
a

aleksey.tomin

06/11/2020, 6:36 AM
Это должно настраиваться. Магические заклинания из log4j/logback мне не нравятся, пока так попробовал: https://github.com/alekseytomin/kotlin-logging/blob/native-macos/src/macosMain/kotlin/mu/KotlinLoggingConfiguration.kt
b

beholder

06/11/2020, 11:22 AM
logback будет вычислять имя метода только если в шаблоне логгера есть поле
${m}
a

aleksey.tomin

06/15/2020, 9:50 AM
@lewik внезапно https://github.com/Lewik/klog/pull/2 Я не знаю, как лучше расшарить код на все три платформы, кроме как копипастой. До 1.4 вроде нет хорошего способа.
l

lewik

06/15/2020, 9:52 AM
@aleksey.tomin Надо признать, я и зам не знаю. Может @altavir Знает? Если это технически невозможно/неудобно, то ничего против копипасты не имею.
a

aleksey.tomin

06/15/2020, 9:53 AM
Посмотрите пока версию для мака. В винде не получается номер строки (завтра уточню ещё). Докину тестов ещё
l

lewik

06/15/2020, 9:57 AM
@aleksey.tomin Дык... у меня мака нет... )
a

aleksey.tomin

06/15/2020, 10:04 AM
Я про стиль вообще. Там posix голый
a

altavir

06/15/2020, 10:04 AM
Нет пока времени смотреть, но вы похоже хотите hmpp
a

aleksey.tomin

06/15/2020, 10:16 AM
Что такое hmpp? Гугл в растерянности
a

altavir

06/15/2020, 10:16 AM
hierachical multi-platform mpoject
a

aleksey.tomin

06/15/2020, 10:18 AM
Да, я и говорил, что до 1.4 никак Но могу (если не против) перевести на 1.4-M2
a

altavir

06/15/2020, 10:21 AM
Ну недолго ждать осталось.
l

lewik

06/15/2020, 10:34 AM
Ну, можно перевести на будущее. Задел сделать
a

aleksey.tomin

06/15/2020, 11:16 AM
Добавил тест. Сейчас hmpp попробую на 1.4-M2
Что-то от js и groovy у меня мозги в трубочку сворачиваются- не понимаю ни то ни то 😞
l

lewik

06/15/2020, 11:33 AM
По поводу груви я вас очень понимаю. Может, на kts перейти?
А зачем вам js?
a

aleksey.tomin

06/15/2020, 11:36 AM
Да мне пишет, мол
Copy code
Please choose a JavaScript environment to build distributions and run tests.
Not choosing any of them will be an error in the future releases.
kotlin {
    js {
        // To build distributions for and run tests on browser or Node.js use one or both of:
        browser()
        nodejs()
    }
}
При
gradlew build
Может, на kts перейти?
Ну тут хозяин - барин 🙂 Заодно можно gradle до 6.3 хотя бы подтянуть.
a

altavir

06/15/2020, 11:37 AM
ну так да. надо выбрать или то или другое, или все вместе. Там разная модель сборки
лучше сразу до 6.5
l

lewik

06/15/2020, 11:38 AM
Я только за, сейчас отвлечься на это не могу, но не думаю что это особо сложно.
Так что pr are welcome)
Я вот правда считаю что .idea должно быть в локальном gitignore, но все упорно его пихают в репозиторий. Не знаю почему. Но раз так - ну что, пусть будет в репозитории) ну это мелочи
a

altavir

06/15/2020, 11:39 AM
Я тоже его игнорю
l

lewik

06/15/2020, 11:39 AM
@aleksey.tomin Если вы можете апнуть до 6.5 - я только за
И на kts - я только за.
Единственно что хочется - чтобы этот логер был как можно более простым и легким.
Я вот не знаю, как там с логированием на native. Получается, надо самим формат делать?
a

altavir

06/15/2020, 11:41 AM
Ну и вы должны объяснить людЯм (мне например), чем оно лучше kotlin-logging. У меня тестов не много, поэтому не понятно, какая разница
l

lewik

06/15/2020, 11:41 AM
А почему оно должно быть лучше?)
Вот, @aleksey.tomin, а почему вы это делаете не на kotlin-logging а на klog?
a

aleksey.tomin

06/15/2020, 11:43 AM
Я делаю это для себя. Сделал аналогичную работу по kotlin-logging, но там просто много кода и возможностей, много работы. Пока не решился p/r кинуть. Тут проще, плюс можно пообщаться спокойно, а не в рамках p/r 🙂
a

altavir

06/15/2020, 11:44 AM
Ну просто мне кажется, что если нет критических недостатков, лучше иметь одну мощную либу, чем много частичных.
l

lewik

06/15/2020, 11:44 AM
Ну вот.. "тут проще" для меня тоже было начальной точкой. Мотороллер то не мой, код стащил у @maxim.shafirov он просто очень долго отвечал.
a

aleksey.tomin

06/15/2020, 11:48 AM
Может и лучше. Но там p/r на linux полгода висит - что-то страшно 🙂
11 Views