Доброго времени суток, товарищи!
Думаю писть логи в html формате. Возникла следующая идея - чтобы ошибка в логе имела ссылку на оффсайт движка в раздел справки с описанием этой ошибки и действий, которые необходимо принять чтобы ее устранить. Какая то такая например: "<a href = http://sigle.com/help/error.php?err="InitError">Init Error!</a>" может быть в логах. Чем это удобно - открываем логи, видим ошибку в виде ссылки, если не знаем что делать - щелкаем на нее и RTFM.
Так вот, развивая идею я пришел в выводу что было бы довольно удобно сделать вывод в логи ошибок в момент возникновения исключения. Т.е. в описываем исключении будут методы для вывода имени ошибки (what()) и вывод решения (ссылка на сайт), чтобы сформировать строчку в лог-файле. Но тут возникли некоторые неприятные моменты.
#include <iostream>
using namespace std;
class Error
{
protected:
void Log()
{
cout<<GetErrorName()<<" : "<<GetSolutionName()<<endl;
}
virtual const char * GetErrorName() = 0;
virtual const char * GetSolutionName() = 0;
public:
//Base() {Log();};
};
class BeerIsOver : public Error
{
protected:
const char * GetErrorName() {return "You beer is over";};
const char * GetSolutionName() {return "bye";};
public:
BeerIsOver() {Log();};
};
class LightIsRed : public Error
{
protected:
const char * GetErrorName() {return "Lamp is red!";};
const char * GetSolutionName() {return "don't see";};
public:
LightIsRed() {Log();};
};
int main()
{
try
{
throw BeerIsOver();
}
catch(...)
{
}
try
{
throw LightIsRed();
}
catch(...)
{
}
cout << "Ok..." << endl;
return 0;
}
1. Не охота писать конструктор в производных классах (он один фиг какой то шаблонный). Нельзя ли что нибудь придумать, чтобы обойтись без этого?