首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为log4cplus创建自定义布局

如何为log4cplus创建自定义布局
EN

Stack Overflow用户
提问于 2015-11-17 09:48:49
回答 1查看 1.1K关注 0票数 4

在搜索了什么感觉太长之后,我决定问一个关于堆栈溢出的简单问题:如何为log4cplus (1.1.2)创建一个自定义布局?最相关的问题是How do I add a custom filter in log4cplus?,其中作者将新类直接添加到log4cplus目录(还是使用log4cplus命名空间?)。我没有此选项,因为log4plus头和库是独立安装的(简单地将命名空间设置为log4cplus也不起作用。

我尝试的是一个从log4cplus::PatternLayout继承的最小示例:

代码语言:javascript
复制
namespace myNameSpace {
  class LOG4CPLUS_EXPORT MyPatternLayout: public ::log4cplus::PatternLayout {
    public:
       MyPatternLayout(const log4cplus::tstring& pattern);
       MyPatternLayout(const log4cplus::helpers::Properties& properties);
      ~MyPatternLayout();
    private:
      // Disallow copying of instances of this class
      MyPatternLayout(const MyPatternLayout&);
      MyPatternLayout& operator=(const MyPatternLayout&);
};
}

我希望LOG4CPLUS_EXPORT负责将我的类注册到log4cplus框架中,以便在配置文件中使用它。然而,添加

代码语言:javascript
复制
log4cplus.appender.STDOUT.layout=myNameSpace::MyPatternLayout

导致错误:

代码语言:javascript
复制
log4cplus:ERROR Cannot find LayoutFactory: "myNameSpace::MyPatternLayout"

那么,如何注册自定义布局/附录呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 13:42:25

在尝试了许多事情之后,它归结为一个简单的条目,必须放在log4cplus::initialize();之后和log4cplus::PropertyConfigurator::doConfigure("<path to config file");之前。如果要在log4cplus命名空间中添加新布局,可以简单地

代码语言:javascript
复制
//example1
log4cplus::initialize();
// register our stuff
log4cplus::spi::LayoutFactoryRegistry& reg = log4cplus::spi::getLayoutFactoryRegistry();
LOG4CPLUS_REG_LAYOUT(reg, MyPatternLayout);
log4cplus::PropertyConfigurator::doConfigure(Logger::mConfigFile);

或者,如果您想使用自己的命名空间

代码语言:javascript
复制
 //example2
 log4cplus::initialize();
 // register our stuff
 log4cplus::spi::LayoutFactoryRegistry& reg = log4cplus::spi::getLayoutFactoryRegistry();
 LOG4CPLUS_REG_PRODUCT (reg, "myNamespace::", MyPatternLayout, myNamespace::, log4cplus::spi::LayoutFactory);
 log4cplus::PropertyConfigurator::doConfigure(Logger::mConfigFile);

然后,您可以将配置中的布局用作

代码语言:javascript
复制
log4cplus.appender.STDOUT.layout = log4cplus::MyPatternLayout #example 1

代码语言:javascript
复制
log4cplus.appender.STDOUT.layout = myNamespace::MyPatternLayout #example 2

很简单,对吧?我希望log4cplus有一个更接近.log4j的文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33753720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档