c++ - 如何使用 log4cpp 一次记录多个变量?

标签 c++ logging log4cpp

如何使用 log4cpp 记录多个字符串?

例如如果我想将所有 argv 记录到 main:

#include <iostream>
#include <log4cpp/Category.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/PatternLayout.hh>

using namespace std;

int main(int argc, char* argv[]) {
    log4cpp::Appender *appender = new log4cpp::FileAppender("FileAppender","mylog");
    log4cpp::PatternLayout *layout = new log4cpp::PatternLayout();
    layout->setConversionPattern("%d: %p - %m %n");
    log4cpp::Category& category = log4cpp::Category::getInstance("Category");
    appender->setLayout(layout);
    category.setAppender(appender);
    category.setPriority(log4cpp::Priority::INFO); 

    category.info("program started"); // this works fine, I see it in the logfile

    for(int i=0; i<argc; ++i) {
        // next line does not compile:
        category.info("argv["<<i<<"] = '"<<argv[i]<<"'");
    }

    return 0;
}   

线

category.info("argv["<<i<<"] = '"<<argv[i]<<"'");

不编译。显然,记录器不能用作 ostream。什么是 log4cpp 方式来记录这样的事情,一次最好?

最佳答案

你有两个选择:

  • 使用 printf-style formatting :

    for (int i = 0; i < argc; ++i)
    {   
        category.info("argv[%d] = '%s'", i, argv[i]);
    }  
    
  • 使用 infoStream() :

    for (int i = 0; i < argc; ++i)
    {
        category.infoStream() << "argv[" << i << "] = '" << argv[i] << "'";
    }  
    

我会选择后者。

关于c++ - 如何使用 log4cpp 一次记录多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645788/

相关文章:

azure - KQL 查询显示特定日志中的先前日志

c++将不同类型连接成函数的字符串

c++ - Log4cpp 重复记录日志

c++ - 通过 gstreamer 和 qt5 可视化 rtsp 流的红色神器

c++ - 如何忽略输入末尾的空行

c++ - 从limemicro编译lms6suite时出现枚举错误

ruby - 您如何将 logrotate 与输出重定向一起使用?

java - 使用 slf4j 作为 log4j2 的抽象

c++ - 如何在 log4cpp 属性文件中使用环境变量

c++ - 这是重载左流运算符的正确方法吗? (C++)