я использую log4cxx для регистрации. Однако ведение журнала может привести к некоторым потерям производительности, которые мне необходимо минимизировать.
Как отключить ведение журнала (во время выполнения или во время компиляции), чтобы минимизировать издержки — не считая удаления всех операторов журнала из кода?
В документации говорится, что
Пользователь должен знать о следующих проблемах производительности.
Производительность ведения журнала при выключенном ведении журнала.
Когда ведение журнала отключено полностью или только для набора уровней, стоимость запроса журнала состоит из вызова метода плюс
целочисленное сравнение. LOG4CXX_DEBUG и подобные макросы подавляют
ненужная оценка выражения, если запрос не включен.
А как его полностью отключить? Это минимальные накладные расходы, которые могут быть достигнуты?
Если вы действительно хотите отключить все журналы во время компиляции, просто переопределите макросы log4cxx, чтобы ничего не происходило, т.е.
#define LOG4CXX_TRACE(logger, expression)
#define LOG4CXX_DEBUG(logger, expression)
#define LOG4CXX_INFO(logger, expression)
#define LOG4CXX_WARN(logger, expression)
#define LOG4CXX_ERROR(logger, expression)
#define LOG4CXX_FATAL(logger, expression)
Ноль накладных расходов. В случае выполнения, вы всегда должны понести некоторые расходы. Вскоре я на самом деле делаю издержки немного больше, чем написано в их документации, обычно с дополнительным вызовом виртуального метода. По сути, это минимальные издержки при использовании этой библиотеки, хотя вы можете получить очень небольшие улучшения, используя оптимизацию времени соединения и т. Д., Чтобы убрать накладные расходы при вызове метода.
Других решений пока нет …