default eol

Nov 12, 2013 13:22

В моей программе на работе есть 170 строчек вида 'std::cerr.*<Из них в 165 - содержатся '\n' или std::endl ( Read more... )

c++

Leave a comment

Comments 19

aamonster November 12 2013, 14:16:11 UTC
Ага, тоже регулярно смотрю на кое-какие свои отладочные сообщения и думаю о том, что надо бы убрать все trailing \n.
У меня всё ещё усугубляется тем, что дело происходит на маке, где NSLog(format_string, ...) не требует \n - т.е. мой отладочный вывод отличается от стандартного.

Reply


(The comment has been removed)

_winnie November 12 2013, 18:26:52 UTC
Тут тонкость "а что если writeLogInSomeThreadSafeWayWithAutoEndlineBecausePonies бросит исключение". В каких-то проектах она важна, в каких-то нет, в общем случае лучше не заниматься сложной химией в деструкторах.

Reply

(The comment has been removed)

max630 November 12 2013, 20:07:55 UTC
В достаточно навороченных проектах логирование не бывает низкоурвневым, там обязательно ищется какой-нибудь текущий логгер, читаются его настройки из файла или делается запрос по IPC. Так что варианты - или вообще изгонять исключения из проекта, или лепить "catch (...)", что ещё хуже чем исключение в логгере. Закрыться от двойного исключения и пускай летит.

Reply


max630 November 12 2013, 20:04:29 UTC
Макросы зло (действительно ли проще всегда писать этот MY_LOG с извратным синтаксисом?). Для логов вполне сойдёт вариант с деструктором (чтобы не было двойного исключения, поставить ту функцию из std:..., не помню имени), и это уже есть, например, в QDebug и google test.

Reply

_winnie November 13 2013, 13:38:50 UTC
Для высоконагруженного сервера хочется уметь делать

if (дебажная трассировка) { только в дебаге вычислять аргументы для лога }.

В формате
MY_LOG("info at index " << i << " is: " << GenerateDebugString(i) );
можно спрятать такой if тривиальным образом.

Чтобы в "обычном" режиме не вычислять то, что не печатается, и чтобы не думать про эффективную генерацию дебажного вывода.

Reply

max630 November 13 2013, 13:45:45 UTC
вот поэтому макросы и зло - потому что написано blabla(x), a на самом деле if (луна в 4 доме, и ветер дует запада) { x }

Reply

aruslan November 14 2013, 01:07:12 UTC
в формате MY_LOG(log) << "info at index " << i << ... тоже можно эффективно спрятать или там убрать совсем, нет?

Reply


161785435 November 13 2013, 03:13:16 UTC
Таки да, чуть более чем все строки вывода логов с этим унылым "<

Reply


(The comment has been removed)

_winnie November 13 2013, 07:05:45 UTC
На самом деле stderr, но это настолько просто, что слишком просто. И все делают свой логгер.

Reply


Leave a comment

Up