Log4cplus: как я могу интегрировать строку в patternLayout?
Я хочу настроить приложение Log4cplus, используя файл конфигурации, для регистрации сообщений, которые содержат параметры из моего приложения (например: запись имени текущей функции, вызывающей log4cplus logger).
Я знаю, что Log4cplus имеет свойство patternLayout, которое использует шаблоны преобразования для регистрации сообщений. Но я не вижу способа интегрировать мою собственную строку в шаблон преобразования (нет ничего похожего на%s в C, который может принимать любую общую строку). Итак, что я хотел бы знать, это:
Есть ли на самом деле возможность интегрировать общую строку (не буквальный текст) в шаблоне Log4Cplus patternLayout?
1 ответ
Вы можете настроить patternLayout непосредственно из кода:
#include <log4cplus/consoleappender.h>
SharedObjectPtr<Appender> _append(new ConsoleAppender());
_append->setName("Test");
std::string tmp = "literal text:";
std::string pattern = tmp + "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n";
std::auto_ptr<Layout> _layout(new PatternLayout(pattern));
_append->setLayout(_layout);
_logger = Logger::getInstance("test_logger.subtest");
_logger.addAppender(_append);
LOG4CPLUS_DEBUG(_logger, "log example");
Это даст вам некоторую свободу в определении общей строки в макете шаблона.
Специально для имени функции, согласно документации API log4cplus, вы также можете использовать %M
:
Used to output function name using __FUNCTION__ or similar macro.
NOTE The __FUNCTION__ macro is not standard
but it is common extension provided by all compilers (as of 2010).
In case it is missing or in case this feature
is disabled using the LOG4CPLUS_DISABLE_FUNCTION_MACRO macro, M expands to an empty string.