- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
void Logger::LogString( std::string &s )
{
if (s.size() > 4096) {
// предотвращаем слишком длиные строки в логе.
s.resize( 4096 );
}
m_LogStream << LogMessagePrefix() << s << std::endl;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+172
void Logger::LogString( std::string &s )
{
if (s.size() > 4096) {
// предотвращаем слишком длиные строки в логе.
s.resize( 4096 );
}
m_LogStream << LogMessagePrefix() << s << std::endl;
}
народ пару дней понадобилось найти почему XML сообщения, размером слегка больше обычного, Xerces не принимает. идеи иссякли - пока в лог не посмотрели и не нашли вот по такому (проиллюстрированому выше) чудо принципу работающий логгер.
TarasB 10.11.2010 15:52 # 0
Dummy00001 10.11.2010 16:29 # 0
любимая фишка оригинального кода: к переменной iostream (которую я выше обозначил m_LogStream) обращатся через три-четыре вложеных глобальных макроса, которые уровень логгера проверяют и нужный стрим подсовывают. я это порывался раньше сюда запостить, но там такая туева хуча кода, что не даже смешно. а говно как раз что три уровня логгера через четыре уровня вложенности макросов (переливающие из пустого в порожнее) генерируется код который ожидает что в контексте есть переменная m_Log указывающая на объект логгера (у объекта логгера она тоже есть и поставлена в this) и у этой переменной есть несколько предопределенных полей, включая уровень лога и стримы. мне сложно представить что происходило в голове у человека/людей кто этот код писал (код есть часть продукта купленого у французской фирмы).
Crazyzubr 10.11.2010 16:45 # +1
burdakovd 10.11.2010 21:11 # 0
absolut 10.11.2010 21:33 # 0
burdakovd 10.11.2010 21:43 # +3
burdakovd 10.11.2010 21:46 # +3
absolut 11.11.2010 00:21 # 0
absolut 11.11.2010 21:36 # 0
alexqc 11.11.2010 21:29 # 0
absolut 11.11.2010 21:42 # 0
alexqc 12.11.2010 10:11 # 0
absolut 12.11.2010 11:42 # +1
Dummy00001 12.11.2010 13:21 # +1
Нет. Изначально это была популярная идея и были ее реализации в нескольких нишевых STLах.
Но эти все оптимизации относительно быстро умерли, даже не достигнув большинства разработчиков, благодаря популяризации много-поточности.
Как и та же оптимизация где `substr() const` возвращает только ссылку на подстроку не создавая новой строки (оригинал строки то не обязан быть const и другим потоком может уже начать меняться). Реализация оказалась сложнее чем предполагалось, и потеря производительности на всех остальных операциях была слишком большая. Проще и эффективней оказалось сделать более быстрый аллокатор памяти - без чего STL в целом тормозило бы до бесполезности.
Govnoeb 11.11.2010 16:07 # 0
bugmenot 11.11.2010 16:11 # +6
Dummy00001 11.11.2010 23:19 # 0
Мистер Хэнки 12.11.2010 17:21 # +3