Size: a a a

2021 February 27

AK

Andrey Konovalov in Modern::Perl
Warstone
И да, судя по коду https://metacpan.org/release/AnyEvent/source/lib/AnyEvent/Log.pm
AE::Log принимает числа в качестве уровня.
Принимает, но что-то 2 у него означает совсем не info.
AE::log 2 => $msg
отличается от
AE::log info => $msg
источник

W

Warstone in Modern::Perl
источник

W

Warstone in Modern::Perl
Можете маппинг чисел из XLog'а в AE::Log сделать.
источник

AK

Andrey Konovalov in Modern::Perl
Ну да, info - это 7 в понимании AE::log
источник

AK

Andrey Konovalov in Modern::Perl
Хорошо бы у logger-объекта тоже что-то вызывалось когда делается XLog::set_level
источник

AK

Andrey Konovalov in Modern::Perl
А то уровня XLog хватает, а уровня AnyEvent::Log - вовсе нет :)
источник

AK

Andrey Konovalov in Modern::Perl
Вот так работает почти правильно: https://PerlBanjo.com/bfa168d27f
Разве что AnyEvent с выкрученным сразу дебагом хрень пишет какую-то про Time::HiRes
источник

b

basiliscos in Modern::Perl
Andrey Konovalov
"Первый раз лог вызовется" - значит, что аргументы\ для XLog::info в этот раз будут вычислены?
да
источник

b

basiliscos in Modern::Perl
Andrey Konovalov
Легко просто специально первый раз вызвать хоть все виды логирования с пустым аргументом, так что реально не критично
1 вызов делается в каждом месте исходников, где написано что-то вроде XLog::warn(), и в нём же проводится его оптимизация.
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
вычисление аргументов сделать исполняемым блоком, который будет исполняться при реальном вызове логгера
ну это наверное, единственно-возможная чисто перловая оптимизация. Но не уверен, что эффективная. потому как будет 1 или 2 вызвова ф-ций. В случае xlog'а их будет 0 или 1.
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
короче, вызов логгера принимает на вход аргументы. аргументом может являться субрутина/исполняемый блок, по типу какие принимают греп/мап/эни и т п. субрутина будет скомпилирована перлом по любому, но вызвана только при вызове логгера, который приняв аргумент и увидев, что это субрутина, вызовет её и получит аргументы для логгирования
т.е. типа
::info({sprintf("%s client ordered %d items}, $client_id, $count));


Это ж капец вырвиглазно. Ну и насчёт эффективности - спорно, но если там тяжёлое вчисление аргументов (ходит в БД) - то да, а если простая конкатенация строк, то она вроде как дешевле должна быть чем вызов сабы.
источник

b

basiliscos in Modern::Perl
Andrey Konovalov
По логике да :)
Асинк-логирование это НЕ то что обычно хочется.

1. В абс. большинстве случаев пишут в файл, а писать в файл асинк способа нормального нет. Тем более кучу мелких строк.
2. в асинк случае больше шансов потерять логи, совсем, а это в 99% не то, что хотелось бы.
3. Видел плюсовые логгеры, там да, есть асинк, но он просто передаёт на другой тред и в другом треде уже пишет на диск. Ну это да, асинк, но не ивент-луп, который, т.к. перле асинк = ивент-луп.
источник

AK

Andrey Konovalov in Modern::Perl
basiliscos
Асинк-логирование это НЕ то что обычно хочется.

1. В абс. большинстве случаев пишут в файл, а писать в файл асинк способа нормального нет. Тем более кучу мелких строк.
2. в асинк случае больше шансов потерять логи, совсем, а это в 99% не то, что хотелось бы.
3. Видел плюсовые логгеры, там да, есть асинк, но он просто передаёт на другой тред и в другом треде уже пишет на диск. Ну это да, асинк, но не ивент-луп, который, т.к. перле асинк = ивент-луп.
Иногда "горькая утрата" сообщения лога - не особо страшна. В принципе даже весьма часто :) Мало того, если бы это была асинк-запись в ELK, то норм, а вот на файл обязательно синк что ли?
У меня фактически пишет в STDOUT всегда, который подбирает systemd
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
т.е. типа
::info({sprintf("%s client ordered %d items}, $client_id, $count));


Это ж капец вырвиглазно. Ну и насчёт эффективности - спорно, но если там тяжёлое вчисление аргументов (ходит в БД) - то да, а если простая конкатенация строк, то она вроде как дешевле должна быть чем вызов сабы.
Нет, не так. Передавать надо только структурированные данные, аппендер сам оформит строку для файла или сериализацию в джейсон для грейлога или сунет строчку в БД...
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
Нет, не так. Передавать надо только структурированные данные, аппендер сам оформит строку для файла или сериализацию в джейсон для грейлога или сунет строчку в БД...
А пример можно? типа client, order, count?
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
А пример можно? типа client, order, count?
Я ссылку на доку давал, в проекте можно посмотреть как выглядят тесты
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
Я ссылку на доку давал, в проекте можно посмотреть как выглядят тесты
как я понял, структурированные логи... это немного другой концепт, чем неструктурированные, ака хуман-ридбл. Тёплое и мягкое )
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
как я понял, структурированные логи... это немного другой концепт, чем неструктурированные, ака хуман-ридбл. Тёплое и мягкое )
Структурированные всегда можно в текст форматтером
источник

MQ

Mary Queens in Modern::Perl
Да
источник

MQ

Mary Queens in Modern::Perl
Привет
источник