كيف يمكنني تسجيل عدة متغيرات باستخدام log4cpp مرة واحدة؟

StackOverflow https://stackoverflow.com//questions/9645788

  •  10-12-2019
  •  | 
  •  

سؤال

كيف يمكنني تسجيل أكثر من سلسلة واحدة باستخدام 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]<<"'");

لا يجمع.من الواضح أن المسجل لا يعمل كملف com.ostream.ما هو طريقة log4cpp لتسجيل شيء من هذا القبيل، الأفضل في وقت واحد؟

هل كانت مفيدة؟

المحلول

لديك خياران:

  • يستخدم printf-تنسيق النمط:

    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] << "'";
    }  
    

سأذهب مع الأخير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top