Como faço o log de várias variáveis com log4cpp de uma vez?
Pergunta
Como faço para efetuar mais do que uma única cadeia de caracteres com log4cpp?
E. g.se eu quiser registrar todas as argv do principal:
#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;
}
a linha de
category.info("argv["<<i<<"] = '"<<argv[i]<<"'");
não compila.Obviamente, o registrador não funciona como um ostream.O que é o log4cpp forma para fazer algo como isso, preferível uma vez?
Solução
Você tem duas opções:
Utilização
printf
-formatação de estilo:for (int i = 0; i < argc; ++i) { category.info("argv[%d] = '%s'", i, argv[i]); }
Utilização
infoStream()
:for (int i = 0; i < argc; ++i) { category.infoStream() << "argv[" << i << "] = '" << argv[i] << "'"; }
Eu iria com o último.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow