29 lines
2.0 KiB
Markdown
29 lines
2.0 KiB
Markdown
Vzemite nalogo 11.1.
|
|
|
|
Kadar je koda v produkciji in želimo kasneje pregledati ali je med izvajanjem prišlo do napake, se poslužimo shranjevanja informacij o napakah v datoteko (angl. log file(https://en.wikipedia.org/wiki/Logging_(software))) . Pri tej nalogi bomo v ta namen naredili razred Log.
|
|
|
|
Primer:
|
|
|
|
int main() {
|
|
Log(LogType::INFO) << "This is additional message. We can also put multiple << and other types, not just strings e.g. " << 5 << "\n" ;
|
|
std::vector<std::shared_ptr<Student>> students = Student::LoadFromFile("students.csv");
|
|
return 0;
|
|
}
|
|
|
|
Znotraj datoteke log.txt:
|
|
|
|
[INFO] This is additional message. We can also put multiple << and other types, not just strings e.g. 5
|
|
[ERROR] Unparseable date: "6.12.199a"!
|
|
|
|
Ustvarite enum class LogType z vrednostmi DEBUG, INFO, WARN in ERROR.
|
|
Napišite razred Log, ki ima:
|
|
razredno spremenljivko file (ofstream)
|
|
konstantno razredno spremenljivko fileName (string), ki jo kar nastavite na log.txt
|
|
razredno metodo GetStringLogType(LogType type), ki vrača string za podani LogType.
|
|
konstruktor s parametrom type, ki je tipa LogType. Znotraj konstruktorja odprite datoteko in vanjo zapišite za kateri klic se je šlo, torej npr. Log(LogType::Error) bo v datoteko zapisalo [ERROR]. Pri tem uporabite razredno metodo GetStringLogType.
|
|
destruktor, ki zapre datoteko
|
|
prekrite operator <<, vendar naj bo Log &operator<<(const T &msg). Bodite pozorni na to, da lahko prejmemo sporočilo poljubnega tipa (torej gre za šablono). Znotraj te metode zapišemo v datoteko prejeto sporočilo. Na koncu vrnemo kazalec *this.
|
|
Pri metodi LoadFromFile znotraj try-catch bloka, dodajte zapisovanje napake v datoteko v primeru napačnega formata datuma.
|
|
Ustvarite še eno izjemo po lastni izbiri in jo uporabite na ustreznih mestih v vaši kodi. Primer naj bo smiseln.
|
|
Poiščite še 3 smiselne primere za LogType, da bo v datoteko zapisalo [WARN].
|
|
Demonstrirajte delovanje razreda Log in lastne izjeme. |