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.
Другие вопросы по тегам