Пару вопросов по сабжу...
В общем нужно в релизной сборке иметь возможность (по какому нибудь ключу из коммандной строки) детального лога работы программы. При этом в случае, если лог отключен что бы это все не сильно тормозило...
Сейчас информация для лога готовится в любом случае, а потом если надо постится в консоль. Логично, что имеются некоторые неоправданные задержки в режиме, когда логгинг не нужен...
Вариант первый:
Пихаем все всю логику в dll-ку, собираем 2 либы — с логингом и без него. В зависимости от ключа используем либо одину, либо вторую.
Тут трудности в реализации динамического подключения, да и время сборки в 2 раза больше...
Вариант второй:
Вводим где нибудь флажок, что логгинг включен. В зависимости от этого флага собственно делаем логгинг или нет....
Здравствуйте, Graf Alex, Вы писали:
GA>Пару вопросов по сабжу... GA>В общем нужно в релизной сборке иметь возможность (по какому нибудь ключу из коммандной строки) детального лога работы программы. При этом в случае, если лог отключен что бы это все не сильно тормозило...
GA>Какие есть еще соображения по этому поводу?
Лучше настраивать логгер через конфигурацинный файл. Этот файл может содержать такие параметры логгинга как:
Уровень (severity level) — вроде debug/info/warn/error/fatal/off. Уровни можно связать отношением наследования: например, если в твоем конфиге выставлен уровень warn, то логгироваится будут только сообщения warn, error и fatal.
Куда собственно выводить лог (консоль, файл, сетевой лог сервер).
Логгинг будет выключен если либо в конфиге выставлен off, либо если конфигурационный файл отсутствует.
Здравствуйте, Андрей Коростелев, Вы писали:
АК>Здравствуйте, Graf Alex, Вы писали:
GA>>Пару вопросов по сабжу... GA>>В общем нужно в релизной сборке иметь возможность (по какому нибудь ключу из коммандной строки) детального лога работы программы. При этом в случае, если лог отключен что бы это все не сильно тормозило...
GA>>Какие есть еще соображения по этому поводу?
АК>Лучше настраивать логгер через конфигурацинный файл. Этот файл может содержать такие параметры логгинга как: АК>
АК>Уровень (severity level) — вроде debug/info/warn/error/fatal/off. Уровни можно связать отношением наследования: например, если в твоем конфиге выставлен уровень warn, то логгироваится будут только сообщения warn, error и fatal. АК>Куда собственно выводить лог (консоль, файл, сетевой лог сервер). АК>
АК>Логгинг будет выключен если либо в конфиге выставлен off, либо если конфигурационный файл отсутствует.
Не, ну это все понятно.... Оно в принципе так и работает, логгинг многоуровневый, да еще и по модулям...
Здравствуйте, Graf Alex, Вы писали:
GA>Пару вопросов по сабжу... GA>В общем нужно в релизной сборке иметь возможность (по какому нибудь ключу из коммандной строки) детального лога работы программы. При этом в случае, если лог отключен что бы это все не сильно тормозило...
GA>Сейчас информация для лога готовится в любом случае, а потом если надо постится в консоль. Логично, что имеются некоторые неоправданные задержки в режиме, когда логгинг не нужен...
GA>Вариант второй: GA>Вводим где нибудь флажок, что логгинг включен. В зависимости от этого флага собственно делаем логгинг или нет....
GA>Какие есть еще соображения по этому поводу?
GA>ЗЫ Платформа — Юникс
Очень удобно и быстро.
Главное отоптимизировать функцию need_logging(). Т.к. когда логирование выключено будет проверяться только она, никакого форматирования и вычисления никаких функций не будет
#define A if(C) X
#define B if(!C) ; else X
if(whatever)
A << "oops";
else
f();
if(whatever)
B << "oops";
else
f();
// и получится:if(whatever)
if(C)
X << "oops";
else
f(); // вот вам и упс, это предназначалось к другому if!if(whatever)
if(!C)
;
else
X << "oops";
else
f();
P. S. Фигурные скобки a la Perl (т. е. везде) рулят.
Здравствуйте, Graf Alex, Вы писали:
GA>Пару вопросов по сабжу...
GA>Вариант первый: GA>Пихаем все всю логику в dll-ку, собираем 2 либы — с логингом и без него. В зависимости от ключа используем либо одину, либо вторую. GA>Тут трудности в реализации динамического подключения, да и время сборки в 2 раза больше...
GA>Какие есть еще соображения по этому поводу?
GA>ЗЫ Платформа — Юникс
Может быть будет интересно посмотреть http://logging.apache.org/ ? Порт на C++ я не смотрел, ограничившись .net'ом, но быть может это то, что вы ищите.
Я бы сделал так:
Определяешь две варианта ф-ции логинга первая делает сове дело вторая просто фиктивная, при запуске устанавливаешь поинтер на ф-цию, на нужную тебе ф-цию
Здравствуйте, nen777w, Вы писали:
N>Я бы сделал так: N>Определяешь две варианта ф-ции логинга первая делает сове дело вторая просто фиктивная, при запуске устанавливаешь поинтер на ф-цию, на нужную тебе ф-цию
Советую просмотреть Logging Service в ACE :
мулти платформенность
возможность управлять и перенаправлять output.
фильтрация по severity на уровне процесса или потока
И еще много чего
Graf Alex wrote:
> Пару вопросов по сабжу... > В общем нужно в релизной сборке иметь возможность (по какому нибудь > ключу из коммандной строки) детального лога работы программы. При этом в > случае, если лог отключен что бы это все не сильно тормозило... > > Сейчас информация для лога готовится в любом случае, а потом если надо > постится в консоль. Логично, что имеются некоторые неоправданные > задержки в режиме, когда логгинг не нужен... > > Вариант первый: > Пихаем все всю логику в dll-ку, собираем 2 либы — с логингом и без него. > В зависимости от ключа используем либо одину, либо вторую. > Тут трудности в реализации динамического подключения, да и время сборки > в 2 раза больше... > > Вариант второй: > Вводим где нибудь флажок, что логгинг включен. В зависимости от этого > флага собственно делаем логгинг или нет.... > > Какие есть еще соображения по этому поводу?