МСС ресурс Freeware Open source Кафедра МСС Факультет  

v3.1

           

proglog.h
Клас ProgLog

Мова:
С++ (ISO/IEC 14882, Standard for the C++ Programming Language)
Платформа:
мультиплатформений
 

Невеличкий, але корисний клас для ведення журналу подій. Цей журнал (log) призначений не стільки для кінцевого користувача, скільки для розробника. Даний клас може направляти повідомлення як у файли (log-файли), так і у потоки (stream, наприклад cout, cerr). Приблизно так:

--------------Sun Sep 29 23:42:32 2002
Begin...
--------------Sun Sep 29 23:42:35 2002
End


 

Члени класу
private _ProgLog* _progLog
           Допоміжний клас для організації потокового запису журналу подій.
private ostream* ProgLogStream
           Покажчик на потік виводу повідомлень.
private bool isFileCreated
           Прапорець визначає чи був створений новий файловий потік у конструкторі.

 

Конструктори
ProgLog(const char* FileName, bool clear = true)
             Параметри: ім'я log-файлу та прапорець його очищення (clear=true) або дописування повідомлень у кінець файлу (clear=false).
ProgLog(ostream& stream)
             Параметри: потік для виводу повідомлень.

 

Функції-члени класу
 template <class T> int Add(const T& src)
           Вписує src у журнал повідомлень (файл чи потік).
Повертає: 0, якщо операція пройшла успішно.
template <class T> static int Write(ostream& stream, const T& src, bool isTime = true)
           Вписує src у потік stream. Прапорець isTime визначає чи буде (true), чи не буде (false) записаний також час цього повідомлення (з нової стрічки).
Повертає: 0, якщо операція пройшла успішно.
template <class T> static int Write(const char* fileName, const T& src, bool isTime = true, bool isClear = false)
           Вписує src у файл з іменем fileName. Прапорець isTime визначає чи буде (true), чи не буде (false) записаний також час цього повідомлення (з нової стрічки). Прапорець isClear визначає чи буде файл очищений (true), або ж повідомлення буде дописане у кінець файлу (false).
Повертає: 0, якщо операція пройшла успішно.
template <class T> _ProgLog& operator << (const T& src)
           Вписує src у журнал повідомлень (файл чи потік).

 


Допоміжний клас _ProgLog

Призначений для організації потокового запису у журнал повідомлень (файл чи потік). Неможливо (і не потрібно) в програмі створювати об'єкти цього класу - їх буде створювати ProgLog для того, щоб потоковий запис здійснювався структуровано по стрічках.


 

Члени класу
private ostream* ProgLogStream
           Покажчик на потік для запису повідомлень.

 

Конструктори
private _ProgLog(ostream* stream)
             Параметри: потік для запису повідомлень.

 

Функції-члени класу
template <class T> _ProgLog& operator << (const T& src)
           Вписує src у журнал повідомлень (файл чи потік), але при цьому не зазначає часу і не переходить на нову стрічку.

 

Опис

Типове використання даного класу:

ProgLog logg("mylog.log");

logg << "If you have " << 1 << " shot...";

Той факт, що оператор << повертає допоміжний клас _ProgLog (до речі, в програмі неможливо створювати об'єкти цього класу) гарантує, що все, що стоїть у ланцюгу після logg, буде записано однією стрічкою (за одним і тим самим часом). Приблизно так:

--------------Sun Sep 29 23:50:32 2002
If you have 1 shot...

Крім того, можна виводити повідомлення на консоль, якщо замість імені файлу вказати відповідний потік (stream):

ProgLog logg(cerr);

Можна використовувати декілька логерів, прив'язаних до одного файлу або потоку (запис буде відбуватися послідовно - за надходженням повідомлень):

ProgLog logg1("file.log"), logg2("file.log");

або

ofstream strm("stream.log");

ProgLog LoggStream1(strm), LoggStream2(strm); //потік strm - ОДИН

Єдина умова: якщо запис журналу організовано через потік, то він має бути єдиним для даного журналу (як в попередньому прикладі). Тобто наступний код може привести до неприємностей:

ProgLog logg_file("file.log");

ofstream strm1("file.log"), strm2("file.log"); //потоки РІЗНІ, але вказують на один файл

ProgLog logg_stream1(strm1), logg_stream2(strm2); //всього: 3 журнали записують у один файл

logg_stream1 << "message1"; logg_stream2<< "message2"; logg_file << "message3"; //потенційні неприємності при запису


Будь-ласка, надсилайте пропозиції, питання, зауваження: soft@unicyb.kiev.ua
Запрошуємо також до участі у самому проекті: надсилайте свої матеріали, які, по-можливості, будуть виставлені на сайті (див. Для авторів).

Кафедра Моделювання складних систем факультету кібернетики Київського університету імені Тараса Шевченка
03127, Україна, Київ, просп. Глушкова 2, корп. 6, кафедра МСС тел.: (044) 259-05-31, (044) 259-02-37, e-mail: garash@unicyb.kiev.ua
Всі права застережено.