Log4cplus:如何将字符串集成到patternLayout中?

时间:2017-09-07 13:32:56

标签: logging log4cplus pattern-layout

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

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

实际上是否需要将通用字符串(不是文字文本)集成到Log4Cplus patternLayout中?

1 个答案:

答案 0 :(得分: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 documentation,您还可以使用%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.