2

我想使用配置文件配置 Log4cplus appender,以记录包含来自我的应用程序的参数的消息(例如:记录调用 log4cplus 记录器的当前函数的名称)。

我知道 Log4cplus 具有使用转换模式记录消息的patternLayout属性。但是我看不到将我自己的字符串集成到转换模式中的方法(C 中没有像 %s 这样的东西可以接受任何通用字符串)。所以,我想知道的是:

实际上是否可以将通用字符串(不是文字文本)集成到 Log4Cplus 模式布局中?

4

1 回答 1

0

您可以直接从代码中配置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");

这将为您在模式布局中定义通用字符串提供一些自由。

特别是对于函数名称,根据log4cplus API 文档,您还可以使用%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.
于 2018-02-01T13:55:02.107 回答