Size: a a a

2021 May 27

KF

Konstantin Firsov in dlang.ru
мультилоггер настраивается из конфига, на каждый логгер в stdout и в файл свои уровни, чтобы создать его в воркере нужно продублировать все логику инициализации, что крайне геморройно, поскольку к логгеру еще и подключается окно проги для вывода ошибок. при этом проблемы многопоточности, когда логгер приложения переключается на один логлевел, а в воркере работает совсем другой - остаются. наверное еще возможен вариант, что кто-то из логгеров тупо заблокирует файл, не знаю, как оно там внутри сделано.
источник

KF

Konstantin Firsov in dlang.ru
мтак, а если пытаться завернуть логгер в свою иммутабельную обертку, то наверное нельзя будет вызвать метод логгера в immutable методе своей обертки, поскольку он мутабельный, а ссылку immutable(Logger) получить низя.
источник

И

Игорь in dlang.ru
Добро пожаловать в мир иммутабельности d
источник

DP

Dmitry Popov in dlang.ru
Если он мутабельный и разделяется между потоками, то это shared. Точно не immutable.
источник

KF

Konstantin Firsov in dlang.ru
ладно, вариант с иммутабельностью выглядит не очень. Второй вариант, который напрашивается - выдавать Tuple!(LogLevel, string) или string,string что-то похожее и посылать через send родительскому потоку, в котором оно пересылается в логгер, а можно из Variant сделать сравнение value.type == typeid(Tuple!(LogLevel, string)), это корретно?
источник

KF

Konstantin Firsov in dlang.ru
хотя уже начинает костылями попахивать.
источник

И

Игорь in dlang.ru
Учти что если в потоке работает event loop или другое ожидание то   receive отработает тогда когда пооучится
источник

KF

Konstantin Firsov in dlang.ru
да тут уже половина проги на костылях и работает как получится, пока другого способа логирования в голову не приходит.
источник

KF

Konstantin Firsov in dlang.ru
не writeln же там делать
источник

И

Игорь in dlang.ru
Откажись от тммутабельности
источник

KF

Konstantin Firsov in dlang.ru
эмм...  я не слишком хорошо владею многопоточностью в ди, как бы хуже не вышло). Сейчас попробую прокидывать логирование в родительский поток, хотя бы в рамках эксперимента.
источник

Е

Евгений in dlang.ru
У меня логгер работает в отдельном потоке, а все остальные потоки шлют ему сообщения. В чем проблема-то?
источник

DH

Dark Hole in dlang.ru
Safe nogc betterC?
источник

Е

Евгений in dlang.ru
а задача сделать такой логгер?
источник

DH

Dark Hole in dlang.ru
Не порти мем😡
источник

Е

Евгений in dlang.ru
тогда еще nothrow
источник

DP

Dmitry Popov in dlang.ru
И разноцветный
источник

DH

Dark Hole in dlang.ru
Это как раз легче всего сделать, не?
источник

KF

Konstantin Firsov in dlang.ru
ну вроде проброс сообщений в родительский поток, который их логирует меня пока устраивает и у логгера есть метод log, в который сразу можно кинуть и левел и сообщение, разве что нужно проектировать класс специально с делегатом "логгером-коллбэком", но это вполне терпимо. Риски от более низкоуровневой многопоточности кажутся более высокими. Тем более, что я через месяц забуду все нюансы, как оно работает и внезапные баги там править будет тот еще квест и приключения.
источник

KF

Konstantin Firsov in dlang.ru
а... ну и при таком подходе на коллбэке данные о потоке и прочем могут потеряться, в логгер же просто левел и сообщение приходят, когда сам логгер вроде как умеет распечатывать id разных потоков.
источник