c++ - 如何为 log4cplus 创建自定义布局

标签 c++ logging log4cplus

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

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

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 框架,以便我可以在配置文件中使用它。但是,添加

log4cplus.appender.STDOUT.layout=myNameSpace::MyPatternLayout

导致错误:

log4cplus:ERROR Cannot find LayoutFactory: "myNameSpace::MyPatternLayout"

那么如何注册自定义布局/附加程序?

最佳答案

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

//example1
log4cplus::initialize();
// register our stuff
log4cplus::spi::LayoutFactoryRegistry& reg = log4cplus::spi::getLayoutFactoryRegistry();
LOG4CPLUS_REG_LAYOUT(reg, MyPatternLayout);
log4cplus::PropertyConfigurator::doConfigure(Logger::mConfigFile);

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

 //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);

然后您可以在配置中使用布局作为

log4cplus.appender.STDOUT.layout = log4cplus::MyPatternLayout #example 1

log4cplus.appender.STDOUT.layout = myNamespace::MyPatternLayout #example 2

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

关于c++ - 如何为 log4cplus 创建自定义布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33753720/

相关文章:

log4cplus - 使用 Log4Cplus (Windows) 从多个进程记录到同一日志文件

c++ - 如何为具有相同模板的模板类定义和使用友元函数?

php - 内置的 PHP 服务器日志在哪里?

java - Wildfly日志未保存

python - logger.info 在 Django 日志记录中不起作用

log4cplus - 有 Log4cplus 日志属性文件的文档吗?

c++ - 如何终止DLL中的log4cplus?

c++ - 使用 __debugbreak 在 GoogleTest 中捕获自定义断言

c++ - 使用 Matlab 对大数据 (16gB) 进行 FFT

c++ - 在运行时从 xml 文件构建对象并一次性初始化?