Войти
ФлеймФорумПрограммирование

Иона учиться программировать... логгер [C#] (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
10:09, 13 фев. 2019

запись в файл хороша если не нужно следить за состоянием лога в определенный момент пока программа еще работает. То есть такой лог будет полезен для получения фидбека от пользователей. Для себя же во время разработки будет гораздо удобнее вариант с отдельной программой. То есть все наши сообщения отправляем по сети и в реальном времени мы можем их в удобном виде просмотреть, также добавить фильтрацию, поиск, теги. Плюс принимать сообщения можно сразу от нескольких программ которые используют данный логер.


#16
10:40, 13 фев. 2019

Иона
Не, ну без экспорта в латекс и пдф это неполноценный логер.

#17
11:02, 13 фев. 2019

nerengd
> А не многовато ли кода?
Нет. Я бы сказал, наоборот, маловато.

> Для примера мой лог:
файловые потоки в крестах thread-safe на запись?

#18
11:09, 13 фев. 2019

Алсо, Иона - это мужское имя.

#19
(Правка: 11:18) 11:16, 13 фев. 2019

beejah
> файловые потоки в крестах thread-safe на запись?
должны быть.

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2760.htm

#20
(Правка: 11:20) 11:17, 13 фев. 2019

Логер говно. Писать из логера сразу в файл в том же потоке - это дикость. Это не настраиваемо и не конфигурируемо

Рекомендую почитать как сделано в том же log4j2 например, хотя бы общее введение чтобы понимать архитектуру.
Есть логеры - это классы куда мы пишем сообщения, где идет проверка имени логера, проверка вербосити и т.д - как в ТС, затем сообщения кладутся в кольцевой буфер и читаются т.н. аппендерами - это как раз классы, отвечающие за форматирование сообщения, запись на диск/сеть/зип-файл/дебаг-окно и т.д.

Все это настраиваться должно файлами конфигурации, чтобы не требовалось перехерачивать весь код программы, когда решишь вместо (или вместе) файла на диске отсылать пакеты на syslog.
В т.ч. и асинхронная батчевая запись на диск, которая опять таки настраивается только конфигурацией.

Aroch
> Для себя же во время разработки будет гораздо удобнее вариант с отдельной
> программой.
Если делать по уму, на код программы это никак не влияет, только на файл конфигурации логгера.

#21
(Правка: 11:58) 11:19, 13 фев. 2019

кстати,  даже специально для шарперов портировали
https://logging.apache.org/log4net/

И даже для вечно сосущих крестовиков что-то там наваяли
https://logging.apache.org/log4cxx/latest_stable/

#22
12:45, 13 фев. 2019

9К720
> Все это настраиваться должно файлами конфигурации
Ну да, один хмл файл конфигурации логгера для 2д платформера это как-то убого, нужна пара десятков чтоб нормальную гибкость обеспечить.

#23
12:49, 13 фев. 2019

9К720
> Писать из логера сразу в файл в том же потоке - это дикость.
> асинхронная батчевая запись на диск
Не знаю как в этих ваших модных яп, но в С++ все это есть в стд и пока явно не вызовешь fflush данные будут накапливаться в памяти и записываться на диск по своей внутренней логике. Но для логера очень желательно явно вызывать запись на диск, чтоб ничего не потерялось при крэше.

#24
(Правка: 13:07) 13:04, 13 фев. 2019

kipar
> нужна пара десятков чтоб нормальную гибкость обеспечить.
Где я такое говорил? Суть в том, что логеры и апендеры должны быть разьединены.

kipar
> для 2д платформера
Для 2д платформера можно вообще нихера не делать логирование, и писать весь код в одном файле, как это делает местный создатель рогаликов. В данном треде оценивается логгер, а не платформер. Так вот, логеры итт - говно.

/A\
> Но для логера очень желательно явно вызывать запись на диск, чтоб ничего не
> потерялось при крэше.
Да, асинхронная запись в лог имеет такой недостаток. На этапе отладки решается настройкой синхронного аппендера. Либо критичные вещи пишутся синхронно, а отладочная инфа - асинхронно, в другой файл.

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

#25
13:08, 13 фев. 2019

exchg
> должны быть.

Concurrent access to a stream object [string.streams, file.streams], stream buffer object [stream.buffers], or C Library stream [c.files] by multiple threads may result in a data race [intro.multithread] unless otherwise specified [iostream.objects]. [Note: Data races result in undefined behavior [intro.multithread]. --end note]

Что-то я чего-то не понял тогда.
#26
13:17, 13 фев. 2019

9К720
> Где я такое говорил?
Я процитировал
9К720
> В данном треде оценивается логгер, а не платформер. Так вот, логеры итт -
> говно.
Говно (в контексте логгера для 2д игр) - логгер из десятков файлов который надо конфигурировать с помощью хмл (прочитав сначала многостраничный мануал) и который небось ещё пачку зависимостей и марсианскую систему сборки за собой тянет.

#27
13:30, 13 фев. 2019

kipar
> который надо конфигурировать с помощью хмл (прочитав сначала многостраничный
> мануал) и который небось ещё пачку зависимостей и марсианскую систему сборки за
> собой тянет.
Ты бы глянул по ссылкам, прежде чем ахинею то нести.

Конечно, вместо того чтобы час потратить на изучение прикручивания либы, лучше несколько дней писать свой кривой и глючный велосипед.
Впрочем, в геймдеве никогда нормальной инженерной культуры разработки не было, откуда ей взяться.

#28
(Правка: 13:35) 13:33, 13 фев. 2019

Я писал для себя по фану сириоз логгер со всеми этими логгерами, хэндлерами, пуллом сообщений (log4cxx категорически не приемлю, да и код вроде на Ц был).
Потом тупо выкинул, хотя он норм работал и расширялся, потому что для себя по фану обычного stderr - за глаза. Даже на саппорте.
Овчинка выделки не стоит, тупо некому ковыряться с этими логами. Что у меня, двадцать серверов на саппорте и бригада Искандеров, шталь.

#29
14:39, 13 фев. 2019

beejah
> Что-то я чего-то не понял тогда.
Это предложение для стандарта 10 летней давности. Насколько оно прошло и т.д. я не знаю, мелкие пишут в своих сдк что это все оптокобезопасно -

iostream

The standard iostream objects cin, cout, cerr, clog, wcin, wcout, wcerr, and wclog follow the same rules as the other classes, with this exception: it is safe to write to an object from multiple threads. For example, thread 1 can write to cout at the same time as thread 2. However, this can cause the output from the two threads to be intermixed.

https://docs.microsoft.com/en-us/cpp/standard-library/thread-safe… ?view=vs-2017

Посикс (т.е. 'FILE*' для Си) также говорит, что работа с файлами должна быть атомарна и потокобезовпасна.
На практике, я думаю, нужно перепроверять для используемой реализации/целевой платформы.

Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПрограммирование