Ошибка в проектировании? Ну тогда как-бы первый корреспондент прав: довольно удобно в большинстве случаев пользоваться syslog-ом. Это не значит, что не можно обернуть его API в собственный класс. Это значит что тебе не надо думать как минимум о размере логов и пр. в общем о том, о чем думает syslog.
Повторюсь также: подумай об уровнях логгирования. (хотя зачем я это... Некоторые до этого досаточно долго доходили, может и другие пускай мучаются? %))) )
К последнему простой пример: представь себе, что есть у тебя проект. Не самый конечно большой проект, но такой уж и маленький... И вот наступил релиз не релиз, но что-то подобное. И ты понимаешь, что половина сообщений никого кроме разработчиков заинтересовать не может. Что делать будем?
Варианты ответов:
- удалять(комментировать) из исходных текстов лишние отепчатки;
- все "лишнее" оборачивать в #ifdef ... к примеру _DEBUG;
- варианты правильных ответов %);
hint: В неправильных, как минимум (даже если обертки #ifdef ты будешь писать с самого начала), придется перекомпилировать весь проект...
Может и существуют :) Но это уже перебор, из за такой мелочи как лог файл
тащить за собой хрен знает что, и не фак что даром. Че там сложного то
логгер написать? Пятиминутное дело (утрируя), и работать бедет как
я хочу, а не как кто то придумал, и мне приходится с этим мириться.
См. подшивку журнала "Программист" - ьам в одном из номеров был пример реализации логгера через syslog, но с интерфейсом ostream. Точно номер и год - не скажу, гугль тебе поможет. Как щас помню - ровно то, что ты тут хотел, только правильно написанное...
> И ты понимаешь, что половина сообщений никого кроме разработчиков заинтересовать не может. Что делать будем?
Это проблема, я её решил определённым образом, но проблемы остались.
Задача собственно действительно в том что по установленному DEBUG надо изменять поведение, отключать/включать логи. Я не вижу проблеммы в пересборке проекта, я вижу проблемму в том что везде надо ставить #ifdef DEBUG, красивее было бы ставить debug << "lkdfj"; а при сборке релиза логирование бы отключалось, Это просто сделать: шаблоны+частичная имплементация, когда определён DEBUG, сросто переопределяем операторы << на ничего не делание, компилятор должен оптимизировать вызовы пустых функций. Но возникают проблемы, связанные с тем что компилятор не совсем честен + переписывание уже сделанных << для простых типов. Я уже не говорю о проблемах реализиции логов в многопоточных приложениях. Я бы не сказал что проблемма логов в ++ простая. Я за свою деятельность сделал немеренное количество всяких примитивов, но меня не удовлетворяет моя реализация логов, не видел я достоенного экспоната и в чужих реализациях.