Size: a a a

2020 June 22

ML

Maksim Lapshin in ErlangRus
beam_emu.c, terminate_proc
  erts_dsprintf_buf_t *dsbufp = erts_create_logger_dsbuf();

       /* Build the format message */
 erts_dsprintf(dsbufp, "Error in process ~p ");
 if (alive)
     erts_dsprintf(dsbufp, "on node ~p ");
 erts_dsprintf(dsbufp, "with exit value:~n~p~n");


utils.c: do_send_logger_message

erl_trace.c  erts_queue_error_logger_message,  erts_get_system_logger
источник

ML

Maksim Lapshin in ErlangRus
и там выгребается глобальная переменная system_logger
источник

ML

Maksim Lapshin in ErlangRus
сделай whereis(logger)
источник

ML

Maksim Lapshin in ErlangRus
возможно уже не error_logger, а просто logger
источник

SP

Sergey Prokhorov in ErlangRus
https://erlang.org/doc/man/erlang.html#ghlink-system_flag-2-id370200 erlang:system_flag(Flag :: system_logger, Logger) вон че нагуглил
источник

SP

Sergey Prokhorov in ErlangRus
whereis(logger) выдаёт pid.
источник

SP

Sergey Prokhorov in ErlangRus
во, интересно:
1> erlang:system_flag(system_logger, undefined).
<0.72.0>
2> spawn(fun() -> throw(crash) end).            
<0.87.0>
3> spawn(fun() -> error(crash) end).            
<0.89.0>
4> spawn(fun() -> exit(crash) end).            
<0.91.0>
5> erlang:system_flag(system_logger, self()).  
undefined
6> spawn(fun() -> throw(crash) end).        
<0.94.0>
7> flush().
Shell got {log,error,"Error in process ~p with exit value:~n~p~n",
              [<0.94.0>,
               {{nocatch,crash},
                [{shell,apply_fun,3,[{file,"shell.erl"},{line,904}]}]}],
              #{error_logger => #{emulator => true,tag => error},
                gl => <0.66.0>,pid => <0.94.0>,time => 1592815745310676}}
ok

ну походу с внедрением logger и выпиливанием SASL это основательно доработали
источник

SP

Sergey Prokhorov in ErlangRus
но exit(smth) не генерирует ничего
источник

ИИ

Иванов Иванов... in ErlangRus
на уровне вирутальной машины отпрявляет сообщения в otp. ну то такое.
источник

ИИ

Иванов Иванов... in ErlangRus
хотя возможность установить свой обработчик демонстрирует независимость от библиотеки
источник

D

Dim in ErlangRus
Есть системная таблица ets под названием logger . Можно попробовать в нее дампануть и глянуть. Какие там параметры в config.
Есть и такие параметры overload_kill_enable
И overload_kill_qlen
источник

S

Simon in ErlangRus
Коллеги, помогите понять где ошибка

пишу юнит тест для модуля, в котором используются функции модуля epgsql
для простоты изложения
есть функция epgsql:A, которая вызывает epgsql:B
в тесте мокаю epgsql:B

модуль epgsql  мокается с параметром passthrough
в тесте вызывается epgsql:A
я ожидаю, что epgsql:A будет вызывать мой (мокнутый) вариант функции epgsql:B, но на саммо деле вызывается оригинальный

почему ?
источник

AK

Aleksey Kluchnikov in ErlangRus
низнай, но есть предположение что не хорошо мокать чужие функции, мокать свою надо, в которой вызов чужой
источник

S

Simon in ErlangRus
в данном случае наблюдаю эффект, с которым ранее не сталкивался и которому не могу найти объяснение

если в тесте вызываю напрямую мокнутую функцию, то все ок
если вызов мокнутой функции идет через НЕ мокнутую функцию, то вызывается оригинальный вариант
источник

ММ

Михаил Малюк... in ErlangRus
Simon
в данном случае наблюдаю эффект, с которым ранее не сталкивался и которому не могу найти объяснение

если в тесте вызываю напрямую мокнутую функцию, то все ок
если вызов мокнутой функции идет через НЕ мокнутую функцию, то вызывается оригинальный вариант
я в эрланговых моках не копенгаген, конечно, но кажется все логично - если ты вызываешь не мокнутую, а оригинальную функцию, то откуда в ней возьмется твой мок? сорян, если глупость сморозил
источник

E

Elmir in ErlangRus
Dim
Есть системная таблица ets под названием logger . Можно попробовать в нее дампануть и глянуть. Какие там параметры в config.
Есть и такие параметры overload_kill_enable
И overload_kill_qlen
о, спс!
источник

S

Simon in ErlangRus
я тоже не копенгаген, но полагаю, что  meck:expect как раз должен подменять функцию в модуле
и в рамках тесте не важно как она вызывается, важно чтобы этот вызов был в потоке теста
источник

V

Vasilii Demidenok in ErlangRus
если функция вызывается не через глобальный вызов - mock не сработает
источник

V

Vasilii Demidenok in ErlangRus
т.е. если epgsql:A вызывает B, а не epgsql:B - то подмены не происходит
источник

E

Elmir in ErlangRus
и еще - надо ли включать sasl как зависимость аппликейшена?
источник