По вашему это нормально?
"Самый часто переписуемый модуль в нашей программе - логгер". Я прифигел, особенно учитывая то, что функция записи в лог-файл стала принимать не 3 параметра, а 8.
Вообщем, что-бы далеко не ходить - хедер в студию:
#ifndef LogWinH
#define LogWinH
//---------------------------------------------------------------------------
#include <windows.h>
#include "Constants_Application.h"
//---------------------------------------------------------------------------
class TLogWin
//---------------------------------------------------------------------------------------------------------
{
public:
TLogWin(char* pFileName, CRITICAL_SECTION* pcs, lotLogOperationType plot);
~TLogWin();
protected:
char* FFileName;
CRITICAL_SECTION* Fcs;
bool FIsCSExternal;
lotLogOperationType Flot;
public:
void SetLOT(lotLogOperationType plot);
protected:
void WriteLog(char* pFileName, const char* pLogMessage, bool pTime, bool pThreadId, bool pEOL, bool pAppend, bool pCut, lotLogOperationType plot);
public:
void EnterCS();
void LeaveCS();
void WriteOneLog(char* pFileName, const char* pLogMessage, bool pTime, bool pThreadId, bool pEOL, bool pAppend, bool pCut, lotLogOperationType plot);
void WriteManyLog(char* pFileName, const char* pLogMessage, bool pTime, bool pThreadId, bool pEOL, bool pAppend, bool pCut, lotLogOperationType plot);
};
void WriteLogExternal(char* pFileName, const char* pLogMessage, CRITICAL_SECTION* pcs, bool pAppend, lotLogOperationType plot_base, lotLogOperationType plot_line);
#endif
З.Ы. Я, кстати, пишу рассказик, об организации работы в нашем офисе(ну, типа как не надо делать), когда закончу - смогу выложить на потеху людям. просто иногда до дибилизма такого уровня я даже не знаю, как можна было додуматься..
для кучи boolean-ов можно было ввести одну переменную флагов. Ну, я бы ввел..
ЗЫ: а косяк в этом как раз руководителя, он не предусмотрел и не продумал ТЗ
единственная функция логгера - писать в лог, и его поведение, если нужно должно настраиваться при создании логгера
Изменение во всем коде - только тормзят проект
Целиком и полностью поддерживаю. С удовольствием написал бы развернутый опус как было у нас на старой работе, да на что-то более 10 строк не хватает сил :)
Я так подозраваю функция еще каждый раз файл открывает заново.. вот этого я б не вынес - лог все-таки должен быть в одном файле, а значит имя лога и не нужно (нужно только при старте программы)
Будет очень интересно почитать твой рассказ, так сказать, от первого лица.
"Самый часто переписуемый модуль в нашей программе - логгер". Я прифигел, особенно учитывая то, что функция записи в лог-файл стала принимать не 3 параметра, а 8.[/QUOTE]Дык методы можно ж перегружать, а классы - наследовать...
Ну, типа, чтобы метод с тремя параметрами вызывал метод, где их восемь.
[QUOTE=Phodopus]Я так подозраваю функция еще каждый раз файл открывает заново.. вот этого я б не вынес - лог все-таки должен быть в одном файле, а значит имя лога и не нужно (нужно только при старте программы)[/QUOTE]Вот и отнаследовать класс для того, чтобы каждый подвид логгера работал так, как ему надо (если отводится по логфайлу на каждую категорию событий) и, соответственно, под каждый из них задать конфигурацию для упрощённого вызова методов Write..Log() + какой файл открывать. Если такой вариант не устраивает, можно ввести внешнюю, по отношению к классу, функцию конфигурирования - так гибче (скажем, введя суперкласс - менеджер всей этой фигни). Тогда процесс мог бы стать безболезненным (хотя, конечно, всё зависит от способа использования экземпляров класса в коде).
А ещё можно ввести набор специализированных функций вроде ReportEvent(), ReportException(), ReportError()... Ну и в таком ракурсе.
ЗЫ: в строительстве такое весьма часто бывает... дом построят, а потом попросят подземную стоянку еще сделать :)
А заказчики это да, те еще звери..
Например -- в Java есть для этого библиотека Log4J, в той ее версии которую мы использовали нам не хватило только одной фичи -- уровня лога, при котором выводятся в лог все запросы к базе данных с уже подставленными в них параметами (т.е. в таком, в каком они уже непосредственно исполняются сервером СУБД). Вот это и было во враппере, а остальное есть готовое.
1. заказчику глубоко плевать на наш логгер, ему главное, чтоб все остальное работало, а логгер, больше для нас необходим.
2. для этой задачи, я уверен, есть готовые решения, но по всей видимости преследовалась цель изобретения велосипеда, причем явно не с двумя колесами..
3. Мне кажется, что несмотря на все вышенаписаное основные проблемы:
- ненужное усложнение инструмента
- убивание старого интерфейса класса, и правка нескольких сотен мест кода, убивая старый логгер и вставляя новый.
Я вообще думаю, что если нужен логгер для всего проэкта, то он, как и все остальные части проэкта должен иметь тех. документацию и четкий интерфейс. Или я не прав?
Написать коллективное обращение к глубокоуважаемому тимлиду Бобра, подписать его массово и отправить ему.
Вот представьте только -- сидит этот тимлид на работе, и вдруг ему приходит письмо с критикой архитектуры его логгера, и под ним подписи нескольких сотен человек...
Та, мне уже все-равно на реакцию тим-лида. Я все-равно уже скоро там не буду работать :) Просто мне было любопытно: или только я работая в фирме научился тому, как не надо делать, вместо того как надо, или это более распространенное явление. Похоже, что это только мне так везет :)
Порты log4j есть на кучу языков. В том числе и для C++. Функциональность, конфиги, все примерно тоже.
А точ что приведенно в первом посте - просто убийство, а не логгер. )
Не, не в школе :) Компания в принципе еще существует и думаю будет еще сущевствовать до тех пор, пока покупатели основывают свое решение на грузе менеджеров, а не на работоспособности продукта.
Плюс пятак. Пеши изчо. ;)
Мясцо. Я бы столько не выдержал. )
Убило нах.... :D
читаю дальше...
как раз в таком гадюшнике и вырастают профи
а будешь в тепличных условиях сидеть - никогда не узнаешь что такое баги и как их править :)
Более распространенное :)
все же Dart Bobr видел не только как не писать, а также, как надо писать чтоб из кучи дерьма все-таки родить самоцвет? или я не прав? :)
Может того, сразу подсеть забанить, откуда он написал?
А то еще начнут тут щас доказывать, что представленный логгер -- это образец архитектуры:D
Ну-ну... Какашку разноцветную, одной из граней которой является представленный логгер - предмет обсуждения. В любом случае - удачи, ибо навигация при влиянии Гольфстрима - удел избранных.