LINUX.ORG.RU

Ответ на: комментарий от pon4ik

просто ничего лучше не придумал ... хочу логировать таким оператором:

Log(3) << "message";

ну и поработать над своим логером

class Log {
public:
   Log(const int log_level) // ... 
   inline static int level;
   template<class T> Log& operator<<(const T& t) { // пишем в поток строковый}
   ~Log() {// скивываем куда нужно, если level подходит}
};

P.S. кстати, работает

cvprog
() автор топика
Ответ на: комментарий от xaizek

спасибо! нда, матчасть у меня хромает

cvprog
() автор топика
Ответ на: комментарий от Crocodoom

Уровень логирования нужно один раз поставить.

Может синглтон подходит, а может нужно что-то более тонкое, например, переключать уровень логирования для разных модулей или классов …

cvprog
() автор топика
Последнее исправление: cvprog (всего исправлений: 1)
Ответ на: комментарий от cvprog

Log(3) << «message»;

Тут вообще никакой static не нужен, будут только лишние проблемы при использовании нескольких потоков. Обычное поле класса должно работать.

X512 ★★★★★
()
Ответ на: комментарий от X512

Ага, это вообще печалька когда часть полей объекта static а часть нет, нужно либо трусы скидывать, либо крестик надёвывать.

pon4ik ★★★★★
()
Ответ на: комментарий от X512

Log(3) не нужен да, 3 - уровень логирования при котором печатается сообщение, это и делает конструктор Log(const int log_level) - «обычный» метод.

Но, как установить текущий уровень логирования логгера (т.е. что реально будет «распечатано» сообщения с Log(1) или Log(2) или …) для всего модуля или класса или, вообще, программы? нифига не решает это обчный метод

cvprog
() автор топика
Последнее исправление: cvprog (всего исправлений: 1)
Ответ на: комментарий от cvprog

Декомпозиция и инкапсуляция - твои друзья. Обычно, когда нужно логгировать какой-то конкретный модуль, для него не только дефолтный лог будет отличаться. Называют это по-разному, logger, log category, log - но по факту, обычно есть «политика» логгирования в текущем контексте и то, куда логгировать sink. Ограничивать пользователя api статическими полями стоит избегать так долго, как это возможно. Пользователю гораздо проще сделать объект logger если это нужно - целиком статическим.

pon4ik ★★★★★
()
Ответ на: комментарий от cvprog

Но, как установить текущий уровень логирования логгера

В отдельном классе логгера, который будет вызываться здесь:

~Log() {// скивываем куда нужно, если level подходит}
X512 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.