Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用log4cpp一次记录多个变量?_C++_Logging_Log4cpp - Fatal编程技术网

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

C++ 如何使用log4cpp一次记录多个变量?,c++,logging,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记录多个字符串

例如,如果我想将所有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;
}   
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[]){
log4cpp::Appender*Appender=新的log4cpp::FileAppender(“FileAppender”,“mylog”);
log4cpp::PatternLayout*布局=新的log4cpp::PatternLayout();
布局->设置转换模式(“%d:%p-%m%n”);
log4cpp::Category&Category=log4cpp::Category::getInstance(“Category”);
附录->设置布局(布局);
类别。设置追加器(追加器);
category.setPriority(log4cpp::Priority::INFO);
category.info(“程序启动”);//这很好,我在日志文件中看到了
对于(int i=0;i您有两个选项:

  • 使用:


我会选择后者。

也就是说:使用printf或ostringstream预格式化一个字符串,然后记录该字符串?@JörgBeyer:不需要预格式化。请查看我的更新答案。很酷,category.infoStream()是我想要的,但还没有找到。infoStream()是怎么做的如果不应记录任何信息消息,则执行此操作?它是否生成消息并在之后将其删除?我可以想象,在这种情况下,格式版本会更快。@RüdigerStevens:对不起,我没有查看实现,但如果您遇到性能问题,我建议您进行分析。
category.info("argv["<<i<<"] = '"<<argv[i]<<"'");
for (int i = 0; i < argc; ++i)
{   
    category.info("argv[%d] = '%s'", i, argv[i]);
}  
for (int i = 0; i < argc; ++i)
{
    category.infoStream() << "argv[" << i << "] = '" << argv[i] << "'";
}