Показать сообщение отдельно
Старый 06.01.2010, 15:26   #1
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Обработка ошибок, логи и не только.

Доброго времени суток, товарищи!

Думаю писть логи в 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. Не охота писать конструктор в производных классах (он один фиг какой то шаблонный). Нельзя ли что нибудь придумать, чтобы обойтись без этого?
(Offline)
 
Ответить с цитированием