한 번에 Log4CPP가있는 여러 변수를 어떻게 기록합니까?
문제
log4cpp가있는 단일 문자열 이상을 어떻게 기록합니까?
e.g.모든 ARGV의 메인에 모든 ARGV를 기록하려는 경우 :
#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 way 은 다음과 같은 것을 로그에서 기록하는 것입니까?
해결책
You have two options:
-
for (int i = 0; i < argc; ++i) { category.info("argv[%d] = '%s'", i, argv[i]); }
Use
infoStream()
:for (int i = 0; i < argc; ++i) { category.infoStream() << "argv[" << i << "] = '" << argv[i] << "'"; }
I'd go with the latter.
제휴하지 않습니다 StackOverflow