Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
#1

Потоки вывода - C++

20.11.2010, 00:46. Просмотров 1131. Ответов 13

Даже не знаю как правильно сформулировать, но хотел сделать примерно следующее и вошел в ступор.

Как создать класс, который смог бы привязаться к потокам cout/clog/cerr по выбору пользователя?
То есть примерный вид использования был бы таким:
Код
MyClass mc(std::cout);
mc.write("this message");
То есть итоговая задача состоит в написании простейшего логгера со следующей архитектурой.
Message:
Содержит следующие данные
+ content - содержимое сообщения
+ level - приоритет
+ type - тип

Logger:
Отвечает за вывод данных

LogManager:
Управляет сообщениями и потоками,
Фильтрует сообщения по типу и приоритету и направляет в нужный Logger.

Вот начал было реализовывать класс Logger и запнулся
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2010, 00:46     Потоки вывода
Посмотрите здесь:

потоки вывода - C++
доброго времени суток, Уважаемые форумчане! есть проблема, суть проблемы заключается в следующем: ни как не могу передать поток в...

Потоки вводы и вывода - C++
Не обрезает пробелы string str; cin.setf(ios::skipws); cin >> str; cout << str; И можно как-нибудь с...

Потоки ввода-вывода в С++ - C++
Ребят, нужна помощь В программирование я новичок, но сдать нужно 1. Написать программу, печатающую символы. Использовать цикл while....

Потоки ввода-вывода - C++
1) Типы данных, для которых перегружены операторы форматного ввода-вывода.

Вопрос про потоки вывода - C++
Здравствуйте, подскажите в чём кординальная разница между использованием cerr и cout?!?!

Используя потоки ввода/вывода в С++ - C++
Здравствуйте помогите организовать запись информации из массива объектов в класс, чтение данной информации из класса, ввод информации с...

Непонятная ошибка. Потоки ввода/вывода - C++
Решал задачу и столкнулся с проблемой (первый день на c++ "пишу") не пойму что за ошибка #include "stdafx.h" #include <iostream> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2010, 00:52     Потоки вывода #2
можно держать в классе std::ostream*
инициализировать MyClass mc(&std::cout);
так и потоки ввода-вывода, файлы работать будут, пробовал
ссылкой на поток вроде как не удастся обойтись
tartikov
Заблокирован
20.11.2010, 00:54     Потоки вывода #3
Цитата Сообщение от alex_x_x Посмотреть сообщение
можно держать в классе std::ostream*
а почему бы не std::ostream& ?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2010, 00:56     Потоки вывода #4
Цитата Сообщение от tartikov Посмотреть сообщение
а почему бы не std::ostream& ?
с указателем можно будет использовать все производные классы
tartikov
Заблокирован
20.11.2010, 00:57     Потоки вывода #5
Цитата Сообщение от alex_x_x Посмотреть сообщение
с указателем можно будет использовать все производные классы
LOL, а с ссылкой будто нет)
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2010, 01:01     Потоки вывода #6
видимо будет
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2010, 01:04  [ТС]     Потоки вывода #7
Цитата Сообщение от tartikov Посмотреть сообщение
LOL, а с ссылкой будто нет)
Ссылка не может быть не инициализированной.

Такой еще вопрос, если использовать вывод в файлы, то мне не хотелось бы создавать файлы вне класса logger. А так как управлять логгерами я планировал только через менеджер, то нормальным ли решением будет создать два вида логгеров (для консоли и файлов), а в менеджере сделать две функции для создания логгеров:
C++
1
2
void add_logger(string name);
void add_logger(ostream *os);
и в каждой создавать определенного типа.

Естественно сделать базовый logger и два дочерних console_logger и file_logger.
tartikov
Заблокирован
20.11.2010, 01:05     Потоки вывода #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
видимо будет
а зачем тогда указатель?

правка: fasked, уже ответил
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2010, 01:07     Потоки вывода #9
Цитата Сообщение от fasked Посмотреть сообщение
Ссылка не может быть не инициализированной.
ну вот единственно вопрос, что поток будет жестко привязан
fasked, поясни как примерно логирование будет выглядеть, а то не совсем представляю
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2010, 01:11  [ТС]     Потоки вывода #10
Цитата Сообщение от alex_x_x Посмотреть сообщение
поясни как примерно логирование будет выглядеть, а то не совсем представляю
Пользователь с помощью менеджера заранее создает нужные логгеры (можно несколько), настраивает менеджер определенным образом (например задает минимальный приоритет логгируемых сообщений), в общем настраивает фильтрацию. Затем передает в менеджер сообщение и менеджер сам определяет посылать ли это сообщение в логгер и в какой логгер.
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.11.2010, 01:17     Потоки вывода #11
fasked, в любом случае не стоит привязвать менеджера к конкретным типам логгеров. Создай абстрактный класс описывающий интерфейс логгера, менеджер будет "общатся" с логгерами исключительно через него. Не стоит на менеджера возлагать слишком многого. Создание конкретных логгеров лучше возложить на другой объект.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2010, 01:25  [ТС]     Потоки вывода #12
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Создай абстрактный класс описывающий интерфейс логгера, менеджер будет "общатся" с логгерами исключительно через него.
Ну это понятное дело, в конце концов это пришлось бы сделать из-за проблемы хранения логгеров, учитывая их динамически изменяющееся количество.
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Не стоит на менеджера возлагать слишком многого. Создание конкретных логгеров лучше возложить на другой объект.
А вот тут можно поподробнее? Допустим создать еще один тип-строитель, который будет отвечать за создание логгеров. Но кто им будет управлять? Сам пользователь или опять же менеджер?
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
20.11.2010, 01:30     Потоки вывода #13
fasked, все зависит от того, кто, зачем и когда нуждается в логировании. Нужно больше информации о клиентах система логирования.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 02:28     Потоки вывода
Еще ссылки по теме:

Текстовые файлы и потоки ввода/вывода - C++
Доброго времени суток. Уважаемый гуру, не могли бы вы мне помочь с решением данной программы. Алгоритм знаю, но никак не могу его...

Переделать потоки ввода-вывода на prinf и scanf - C++
#include <iostream.h> #include <conio.h> #include <stdlib.h> int x,y,i,j,n1,m1,n2,m2,z; void cret(void) { cout<<"\nVvedit...

Запустить интерпретатор bash, получить потоки ввода вывода - C++
Здравствуйте, мне необходимо в своей программе запустить интерпретатор bash, и получить стандартные потоки ввода/вывода, для того чтобы...

Потоки ввода/вывода: дважды скопировать исходный файл - C++
Когда пытаюсь побайтно копировать из одного файла в другой - всё работает. А вот если попытаться ДВА раза скопировать исходный файл , то...

Потоки ввода/вывода. Сохранение информации в файл и ее считывание оттуда - C++
Всем доброго времени суток. Неделю две назад я начал делать программу, которая бы сохраняла информацию о так называемых фирмах в текстовом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
20.11.2010, 02:28  [ТС]     Потоки вывода #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
все зависит от того, кто, зачем и когда нуждается в логировании. Нужно больше информации о клиентах система логирования.
Конечным клиентом будет приложение, в логах будут отражаться различные события, касающиеся работы этого приложения. Как минимум в лог будут записываться результаты предварительного тестирования (ссылка на прошлую мою тему ), то есть, исходя из данных логов, будет осуществляться поиск заваленных тестов. Пока что это единственная реально существующая задача для системы логгирования, но в будущем в логи будут добавляться и другие события для осуществления мониторинга действий пользователя и ошибок приложения.
Yandex
Объявления
20.11.2010, 02:28     Потоки вывода
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru