Size: a a a

2021 February 27

W

Warstone in Modern::Perl
Так Class::XSAccessor делает (немного не так, там сложнее, но не суть)... Они в рантайме прямо в дерево вставляют обращение к хешу.
источник

AK

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

W

Warstone in Modern::Perl
Кстати - интересный вопрос...
источник

W

Warstone in Modern::Perl
Не скажу прямо так сходу
источник

AK

Andrey Konovalov in Modern::Perl
Посмотрю
источник

AK

Andrey Konovalov in Modern::Perl
Но не принципиально. Жаль, что я не знал про XLog
источник

AK

Andrey Konovalov in Modern::Perl
А чего Вадиму не советовали его?
источник

W

Warstone in Modern::Perl
И да... Первый раз выолнется, второй - нет.

warstone@dev:~$ perl test.plx
[2021/02/27 02:11:09] 63648 test.plx [debug]: Debug messages enabled
[2021/02/27 02:11:09] 63648 test.plx [debug]: Statistics enabled
[2021/02/27 02:11:11] 63648 test.plx [info]: $a = 1
a = 2
b = 2
b = 2
END
warstone@dev:~$ cat test.plx
#!/usr/local/bin/perl
use 5.012;
use warnings;
use lib::abs qw{ lib };
use Panda;
use Project {Service => 1};
use Data::Dumper;
use Benchmark qw/timethis timethese/;
use JSON::XS qw/encode_json/;


my $a = 1;
XLog::info('$a = %d', $a++);
print "a = $a\n";

XLog::set_level(XLog::ERROR);

my $b = 1;
sub qwe {
   XLog::info('$b = %d', $b++);
}
qwe();
print "b = $b\n";

qwe();
print "b = $b\n";

say "END";
источник

W

Warstone in Modern::Perl
Названия проекта не убрал (( Поздно.
источник

AK

Andrey Konovalov in Modern::Perl
Warstone
И да... Первый раз выолнется, второй - нет.

warstone@dev:~$ perl test.plx
[2021/02/27 02:11:09] 63648 test.plx [debug]: Debug messages enabled
[2021/02/27 02:11:09] 63648 test.plx [debug]: Statistics enabled
[2021/02/27 02:11:11] 63648 test.plx [info]: $a = 1
a = 2
b = 2
b = 2
END
warstone@dev:~$ cat test.plx
#!/usr/local/bin/perl
use 5.012;
use warnings;
use lib::abs qw{ lib };
use Panda;
use Project {Service => 1};
use Data::Dumper;
use Benchmark qw/timethis timethese/;
use JSON::XS qw/encode_json/;


my $a = 1;
XLog::info('$a = %d', $a++);
print "a = $a\n";

XLog::set_level(XLog::ERROR);

my $b = 1;
sub qwe {
   XLog::info('$b = %d', $b++);
}
qwe();
print "b = $b\n";

qwe();
print "b = $b\n";

say "END";
Легко просто специально первый раз вызвать хоть все виды логирования с пустым аргументом, так что реально не критично
источник

AK

Andrey Konovalov in Modern::Perl
Вот поддержку AnyEvent::Log сходу непонятно как добавить...
источник

AK

Andrey Konovalov in Modern::Perl
Ну т.е. там же формат не $logger->($msg), а куда более сложный
источник

AP

Anton Petrusevich in Modern::Perl
Andrey Konovalov
Коллеги, а кто что думает на тему вопроса, который ещё @nuclight задавал: как сделать так, чтобы
$debug and $log_debug->(Dumper($very_large_thing_like_elephant))
- вообще не выполнялось ни в каком виде, если дебаг отключен.
Я думаю это сделать на source filter'ах всё же...
<<debug('something')/>>
элементарно заменяется на $log_debug->('something'), если это нужно, и удаляется полностью, если не нужно.
Не очень понятно, почему для таких простых случаев source filter'ы не используются? Портят внешний вид кода?
вычисление аргументов сделать исполняемым блоком, который будет исполняться при реальном вызове логгера
источник

W

Warstone in Modern::Perl
А все просто... Вы ДОЛЖНЫ ВСЕГДА писать XLog::<level>($message)  то есть это должна быть пакетная функция. Иначе оптимизации не будет
источник

W

Warstone in Modern::Perl
То есть $logger->info не будет заоптимизирован. XLog::info - будет. Особенности работы с деревом. Может когда сделаем, но это гораздо больший геморрой.
источник

AP

Anton Petrusevich in Modern::Perl
с учётом того, что мне были нужны структурированные логи, мне блоки по любому нужны были... :)
источник

AK

Andrey Konovalov in Modern::Perl
Warstone
То есть $logger->info не будет заоптимизирован. XLog::info - будет. Особенности работы с деревом. Может когда сделаем, но это гораздо больший геморрой.
Вопрос не в этом
Хотелось бы, чтобы тому логгеру, который устанавливается set_logger, передавались все аргументы как есть.
https://metacpan.org/pod/distribution/XLog/lib/XLog/Logger.pod
Здесь в sub log {} толкают уже $msg.
источник

AK

Andrey Konovalov in Modern::Perl
Возможно, это просто дока не очень точна
источник

AP

Anton Petrusevich in Modern::Perl
нужен логгер, который понимал бы, что ему передают исполняемый блок. нет вызова логгера — нет исполнения
источник

AK

Andrey Konovalov in Modern::Perl
Andrey Konovalov
Возможно, это просто дока не очень точна
Да уж, там в примере нет $level, в описании есть...
источник