我正常使用log4cxx,它为log4cxx提供了一个属性文件。在这里我们可以找到一个参考:
log4cxx: configuring appender with arguments
Reading Property Info in Log4cxx
但是如果我想在没有属性文件的情况下在我的C ++代码中设置log4cxx,我该怎么办?我检查log4cxx代码并尝试通过log4cxx :: helpers :: Properties设置属性,这是我的示例代码:
log4cxx::helpers::Properties properties;
properties.setProperty(L"log4j.rootLogger",L"DEBUG");
properties.setProperty(L"log4j.appender",L"ca");
properties.setProperty(L"log4j.appender",L"fa");
properties.setProperty(L"log4j.appender.fa",L"org.apache.log4j.FileAppender");
properties.setProperty(L"log4j.appender.fa.Append",L"false");
properties.setProperty(L"log4j.appender.fa.File",L"./test.log");
properties.setProperty(L"log4j.appender.fa.layout",L"org.apache.log4j.PatternLayout");
properties.setProperty(L"log4j.appender.fa.layout.ConversionPattern",L"%d [%t] %-5p %.16c - %m%n");
properties.setProperty(L"log4j.appender.ca",L"org.apache.log4j.ConsoleAppender");
properties.setProperty(L"log4j.appender.ca.layout",L"log4j.appender.ca.layout");
properties.setProperty(L"log4j.appender.ca.layout.ConversionPattern",L"%d [%t] %-5p %.16c - %m%n");
log4cxx::PropertyConfigurator::configure(properties);
但我的示例代码不起作用。为什么?任何人都知道如何在没有属性文件的情况下初始化log4cxx记录器?
由于
林水答案 0 :(得分:2)
我在面对相同的挑战时发现log4cxx wiki中的代码示例很有用。
答案 1 :(得分:2)
我写了一篇关于此的帖子:
http://bigbang.waterlin.org/bang/the-way-to-set-log4cxx-properties-without-using-property-file/
添加更多参考资料。
如果要将日志重定向到文件&控制台同时使用以下代码:
#include <log4cxx/logger.h>
#include <log4cxx/helpers/pool.h>
#include <log4cxx/basicconfigurator.h>
#include <log4cxx/fileappender.h>
#include <log4cxx/simplelayout.h>
#include "log4cxx/consoleappender.h"
LoggerPtr logger;
int main() {
log4cxx::FileAppender * fileAppender = new log4cxx::FileAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout()), L"logfile", false);
log4cxx::ConsoleAppender * consoleAppender = new log4cxx::ConsoleAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout()));
log4cxx::helpers::Pool p;
fileAppender->activateOptions(p);
log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(fileAppender));
log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(consoleAppender));
log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getDebug());
log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger");
LOG4CXX_INFO(logger,"Created FileAppender appender");
return 0;
}
答案 2 :(得分:0)
您可以使用ByteArrayInputStream设置log4cxx
std::vector<byte> vc;
// copy property file content into vc
log4cxx::helpers::ByteArrayInputStreamPtr bais(
new log4cxx::helpers::ByteArrayInputStream(vc));
log4cxx::helpers::Properties pp;
pp.load(bais);
log4cxx::PropertyConfigurator::configure(pp);