МСС ресурс | Freeware | Open source | Кафедра МСС | Факультет |
v3.1 |
|
Невеличкий, але корисний клас для ведення журналу подій. Цей журнал (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
Всі права застережено.