Войти
ПрограммированиеФорумОбщее

Логгер с автоматическими секциями (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
20:10, 4 апр. 2016

AndryBlack
я думал над кодом, где запись идёт непосредственно в переменную, обозначающую секцию, но тогда будет валиден такой код:

auto initSection = logger->AutoSection("Main section 1");
if(1)
{
  auto ifSection = logger->AutoSection("If section");
  ifSection << "hello";
  initSection << "wtf??";
}
#16
20:31, 4 апр. 2016

O(1/n)
да, беда. забыл про них=\

#17
21:42, 4 апр. 2016

Ядерный вариант - добавить дополнительный, ручной препроцессинг. Типа вот этого монстра (пример использования), только вместо большой двухслойной прослойки - для каждого файла генерировать его помеченную версию, в котором все операторы снабжены соответствующими переменными. Или не снабжены - можно препроцессор реализовать с возможностью взятия настроек из разных мест, включая, например, специальную #прагму в исходнике.
С другой стороны, ядерное вооружение всё-таки требует особой заботы в виде особо особых рецептов сборки и других вещей, так что, может, проще будет таки запилить макрос с __LINE__ и забыть как страшный сон.

#18
11:44, 5 апр. 2016

2013 студия даже с /Wall не выдаёт ворнинги на одинаковые имена в данном случае. MinGW тоже.
GCC под рукой нет, но в онлайн компилях c -Wall ворнингов на имена тоже не наблюдаю.

/thread

#19
17:41, 5 апр. 2016

SCOPE_EXIT не подойдет? 50 слайд
https://j5uukg.dm2301.livefilestore.com/y3mHQ4IqexyCZ3K02yJ_1rm4Q… es.pdf?psid=1

upd: видео https://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012-Andr… Handling-in-C

#20
19:31, 5 апр. 2016

Alexander K
> 2013 студия даже с /Wall не выдаёт ворнинги на одинаковые имена в данном
> случае. MinGW тоже.
> GCC под рукой нет, но в онлайн компилях c -Wall ворнингов на имена тоже не
> наблюдаю.
Что-то у тебя нет так. У меня часто варнинги вылезают. И они реально помогают, если я вдруг случайно во вложенных циклах начинаю использовать один и тот же счётчик i.
Правда у меня 2015 студия, но раньше в 2013 вроде тоже вылезали.

#21
23:44, 6 апр. 2016

Suslik
Секционность в логе это может быть и хорошо, но добавь записи в лог из разных потоков и секционность идет лесом.
При записи в лог почти всегда выводят Timestamp записи и Id потока, чтобы понимать ход возникновения событий, который допустим привел к падению.
Также в логе разделяют типы записей (info, debug, trace, error и т.д.) чтобы можно было фильтровать события при анализе.

#22
0:03, 7 апр. 2016

asvp
> в лог почти всегда выводят
> Также в логе разделяют
ты как-то в третьем лице множественного числа пишешь. разделяют? ну пусть разделяют, мне-то что? мне важнее максимально доступно визуализировать ход работы программы. для тех целей, для которых предполагается лог, многопоточности нет и не предвидится.

PS
угомонился на варианте с придумыванием имени для каждой секции

#23
0:15, 7 апр. 2016

Suslik
> ты как-то в третьем лице множественного числа пишешь.
Ну да. Не мало видел достойных реализаций и глаза оставил во множестве логов.

> многопоточности нет и не предвидится.
многопоточности нет - это минус
и не предвидится - это плюс.

> мне важнее максимально доступно визуализировать ход работы программы.
Хороший лог показывает не только "что случалось", но и "где, когда и с кем случилось"

Ну да ладно. Тебе в нем рыться.

#24
9:01, 7 апр. 2016

Suslik

> угомонился на варианте с придумыванием имени для каждой секции
Потом захочется делать, например, разноцветные секции (в консоль, html, etc.) и у именованных секций появятся свои плюсы.

#25
14:41, 7 апр. 2016

Suslik
> Свелосипедил простой логгер, синтаксис использования такой:
почему бы для sectionstart/sectionend не сделать вот так:

LoggerSection("some section") {
  Log("this will be inside section");
}
Log("this will not");

PS: да, я не вижу смысла делать: GetLogger(). ООП ради ООП? Ну, это чисто моё имхо.

Hardcode
> Хотя не, можно же с фором угореть. Только макросы останутся.
я ща везде так делаю, где нужен scope. макросы конечно могут доставить неудобств, но это уже  на вкус и цвет, меня устраивает

#26
15:21, 7 апр. 2016

d.m.k
> почему бы для sectionstart/sectionend не сделать вот так:
И что ты засунешь в LoggerSection? С условием, что у тебя не будут ломаться break, continue, return и throw.

#27
15:33, 7 апр. 2016

d.m.k
> PS: да, я не вижу смысла делать: GetLogger(). ООП ради ООП? Ну, это чисто моё
> имхо.
ну давайте ещё про синглтоны похоливорим. у меня может быть несколько инстансов мира. это на самом деле вполне себе выстрелило, например, когда я писал нейрообучатель и у каждого нейрообучаемого в голове было своё представление о мире(отдельный инстанс) и у него был в том числе свой лог, который не писал никуда. то есть я могу передавать логгеры, перенаправленные в файл или вникуда тем объектам, спам от которых мне неинтересен на данном этапе отладки.

#28
15:55, 7 апр. 2016

Suslik
> ну давайте ещё про синглтоны похоливорим
я ж сказал,имхо, ни какого холивара

Delfigamer
> С условием, что у тебя не будут ломаться break, continue, return и throw.
оно сильно надо? не подходит вариант - не используй, делов-то

#29
16:04, 7 апр. 2016

d.m.k
> почему бы для sectionstart/sectionend не сделать вот так:
> LoggerSection("some section") {
> Log("this will be inside section");
> }
ну ок, пусть будет так, но как для этого реализовать LoggerSection()?

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

Тема в архиве.