我正在尝试使用log4cxx在Windows C ++控制台应用程序上通过RollingFileAppender记录我的应用程序。每当大小达到1MB时,我想创建一个新的日志文件。此外,当达到所需大小时,应自动压缩文件。创建的最大文件数必须为10。之后,较旧的文件应被覆盖。
我正在使用:
这是我的代码:
log4cxx::rolling::RollingFileAppender* fileAppender1 = new log4cxx::rolling::RollingFileAppender();
fileAppender1->setLayout(log4cxx::LayoutPtr(new log4cxx::PatternLayout(L"[%d{ISO8601}{GMT}] %-4r [%t] %c | %-5p | %m%n")));
fileAppender1->setAppend(true);
log4cxx::helpers::Pool p;
fileAppender1->activateOptions(p);
log4cxx::rolling::FixedWindowRollingPolicy* rollingPolicy = new log4cxx::rolling::FixedWindowRollingPolicy();
rollingPolicy->setMinIndex(1);
rollingPolicy->setMaxIndex(10);
rollingPolicy->setFileNamePattern(L"j_log_%i.log");
log4cxx::rolling::SizeBasedTriggeringPolicy* triggerPolicy = new log4cxx::rolling::SizeBasedTriggeringPolicy();
triggerPolicy->setMaxFileSize(1024*1024);
fileAppender1->setRollingPolicy(rollingPolicy);
fileAppender1->setTriggeringPolicy(triggerPolicy);
LoggerPtr logger(Logger::getLogger("LogConsole1"));
logger->addAppender(fileAppender1);
logger->setLevel(log4cxx::Level::getTrace());
for (int i = 0; i < 10000; i++)
{
LOG4CXX_INFO(logger, "Created FileAppender appender");
LOG4CXX_INFO(logger, "LOGGER1");
}
获得的结果是一个名为“ .1”(没有任何扩展名)的文件,其中包含这样的内容(似乎可以):
[[2019-09-13 07:44:58,619] 21063 [0x00003e14] LogConsole1 |信息|已创建FileAppender附加程序
[[2019-09-13 07:44:58,622] 21066 [0x00003e14] LogConsole1 |信息| LOGGER1
问题是:
我在做什么错?
我不完全了解您的文件模式,但是文档在其模式中未使用“ L”字符。
在我的项目中是使用
rollingPolicy->setFileNamePattern("file.%i.log");
有时带有一个效果很好的字符串变量。
我在您的代码中找不到该配置。据我所知,您必须使用BasicConfiguration对象设置附加程序。
log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(yourAppenderPointer));
这会将您的附加程序附加到根记录器,并适用于我的情况。这是我初始化的完整代码段。
void someclass::initLogger(std::string fileName) {
std::string::size_type found = fileName.find(".log");
std::string strippedFileName;
if (found != std::string::npos)
{
strippedFileName = fileName.substr(0, found);
}
else
{
strippedFileName = fileName;
fileName = fileName + ".log";
}
//initializes for rolling file appenders
rollingFileAppender = new log4cxx::rolling::RollingFileAppender();
rollingPolicy = new log4cxx::rolling::FixedWindowRollingPolicy();
rollingPolicy->setMinIndex(1);
rollingPolicy->setMaxIndex(3);
log4cxx::LogString fileNamePattern = strippedFileName + ".%i.log";
rollingPolicy->setFileNamePattern(fileNamePattern);
trigger = new log4cxx::rolling::SizeBasedTriggeringPolicy();
trigger->setMaxFileSize(1024);
rollingFileAppender->setRollingPolicy(rollingPolicy);
rollingFileAppender->setTriggeringPolicy(trigger);
rollingFileAppender->setLayout(log4cxx::LayoutPtr(new log4cxx::PatternLayout(LOGFILE_LAYOUT_PATTERN)));
rollingFileAppender->setFile(fileName);
rollingFileAppender->setAppend(true);
//initializes for a console appender
consoleAppender = new log4cxx::ConsoleAppender(log4cxx::LayoutPtr(new log4cxx::PatternLayout(LOGFILE_LAYOUT_PATTERN)));
log4cxx::helpers::Pool p;
rollingFileAppender->activateOptions(p);
log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(consoleAppender));
log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(rollingFileAppender));
}
此代码通过滚动文件附加程序打印到指定的文件,并使用consoleAppender打印到终端
此文件将使用fileName.log打印一个文件,并使用fileName.i.log打印多达三个文件