我试图使用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 x00003e14创建FileAppender附录
2019年-09-13 07:44:58,622 21066 0x00003e14 LogConsole1 INFO / LOGGER1
问题是:
我做错了什么?
发布于 2020-04-08 14:17:56
我不完全理解您的文件模式,但文档在它们的模式中不使用"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打印最多三个文件
https://stackoverflow.com/questions/57919687
复制相似问题