Taki oto plik main.cpp dostaliśmy na zajęciach z programowania. Naszym zadaniem jest dopisanie plików w taki sposób
żeby program działa poprawnie. W komentarzach wewnątrz maina opisuje co kojarzę.
/************* Tego pliku NIE WOLNO modyfikowac *************/
#include "log.hpp"
void f1(void)
{
LOG & log=LOG::get_logger();
log << "[8] ? event";
}
void f2(void)
{
LOG & log=LOG::get_logger();
log << LOG::INFO<< "[9] ? event";
}
void f3(void)
{
LOG & log=LOG::get_logger();
log << "[10] ? event";
log <<LOG::ERROR<< "[11] koniec";
}
int main(int argc, char *argv[])
{
{
LOG & log=LOG::get_logger(); //tzw konstruktor nazwany, tylko... &? W jakim celu?
log.parse_args(argc,argv); //wyciąganie łańcuchów, raczej oczywiste
log << LOG::TRACE << "[1] trace event"; // i tak: wiem, że levele można zrobić za pomocą enum. Dowiedziałem się też
// że nie o to chodzi i lepiej enum nie używać. Poza tym TRACE, DEBUG, ...
// są manipulatorami. Są też... statyczne?
log << LOG::DEBUG << "[2] debug event";
log << LOG::INFO << "[3] info event";
log << LOG::WARNING << "[4] warning event";
log << LOG::ERROR << "[5] error event";
log << "[6] ? event";
log.set_level(LOG::INFO);
log << "[7] ? event";
}
f1();
f2();
f3();
return 0;
}
/*
Opcje wywolania programu:
./app [-l <level>] [-c] [-f <fname>]
Opcja -l zmienia poziom logowania komunikatow, dozwolone wartosci to:
ERROR, WARNING, INFO, DEBUG, TRACE
Logowane sa tylko wiadomosci o poziomie nizszym badz rownym od obecnie ustawionego.
Jesli uzytkownik nie wyspecyfikuje tego argumentu domyslny poziom logowania
ustawiony jest na WARNING (tzn. wyswietlane sa tylko WARNINGI i ERRORY)
Opcja -c powoduje wysylanie komunikatow na standardowe wyjscie bledow (ERROR,
WARNING) oraz standardowe wyjscie logow (INFO, DEBUG, TRACE).
Opcja -f wraz z nastepujaca po niej nazwa plikow powoduje otworzenie (ew. utworzenie
jesli to konieczne) pliku gdzie powinny ladowac komunikaty. Jesli nazwa pliku
jest pominieta tworzony jest plik log.txt
Przyklad dzialania programu:
./Imie_Nazwisko -l ERROR -c -f
16:26:02 19/01/2012 [ERR] [5] error event
16:26:02 19/01/2012 [ERR] [6] ? event
16:26:02 19/01/2012 [ERR] [11] koniec
./Imie_Nazwisko -l TRACE -c -f
16:26:02 19/01/2012 [TRC] [1] trace event
16:26:02 19/01/2012 [DBG] [2] debug event
16:26:02 19/01/2012 [INF] [3] info event
16:26:02 19/01/2012 [WRN] [4] warning event
16:26:02 19/01/2012 [ERR] [5] error event
16:26:02 19/01/2012 [ERR] [6] ? event
16:26:02 19/01/2012 [INF] [7] ? event
16:26:02 19/01/2012 [INF] [8] ? event
16:26:02 19/01/2012 [INF] [9] ? event
16:26:02 19/01/2012 [INF] [10] ? event
16:26:02 19/01/2012 [ERR] [11] koniec
./Imie_Nazwisko -l INFO -c -f
16:26:02 19/01/2012 [INF] [3] info event
16:26:02 19/01/2012 [WRN] [4] warning event
16:26:02 19/01/2012 [ERR] [5] error event
16:26:02 19/01/2012 [ERR] [6] ? event
16:26:02 19/01/2012 [INF] [7] ? event
16:26:02 19/01/2012 [INF] [8] ? event
16:26:02 19/01/2012 [INF] [9] ? event
16:26:02 19/01/2012 [INF] [10] ? event
16:26:02 19/01/2012 [ERR] [11] koniec
Aby uzyskac informacje o dacie systemowej prosze skorzystac z
http://www.cplusplus.com/reference/clibrary/ctime/strftime/
*/
Pierwszy raz nie mam praktycznie kompletnego pojęcia co mogę z tym zrobić.
Na zajęciach oczywiście 0, staram się to nadrobić, ale trudno mi znaleźć jakieś informacje.
Pomoże ktoś?
Kompletnie nie rozumiem
log << ...
Przeciążenie strumienia wyjściowego?
Z góry dzięki;)
PS.: Nie jest to żaden projekt, nie oczekuje, że ktoś zrobi to za mnie. Po prostu naprawdę czuje się bezradny. Przepraszam również za chaos.
PS2.:
Manipulatory:
class Option
{
...
};
class LOG
{
...
public:
static Option TRACE; //itd
...
};
w taki sposób?