Я использую cpp под Linux, и я хочу использовать log4cpp.
Я пытался использовать его под Windows с vs2013, и он работал очень хорошо. Сейчас я работаю под Linux и у меня возникла проблема:
Это не работает с файлом. Вот мой тестовый код:
int main(int argc, char* argv[])
{
fstream logFile;
logFile.open("log", std::ios::app);
log4cpp::OstreamAppender* osAppender = new log4cpp::OstreamAppender("osAppender", &logFile);
// I tried cout as below and it worked, but if I tried as above with a file, it didn't work anymore.
// I mean the "log" file could be created but the message can't be written down in the file. The file is always empty.
//log4cpp::OstreamAppender* osAppender = new log4cpp::OstreamAppender("osAppender", &cout);
osAppender->setLayout(new log4cpp::BasicLayout());
log4cpp::Category& root = log4cpp::Category::getRoot();
root.addAppender(osAppender);
root.setPriority(log4cpp::Priority::DEBUG);
root.error("Hello log4cpp in aError Message!");
root.warn("Hello log4cpp in aWarning Message!");
log4cpp::Category::shutdown();
cout<<"test";
return 0;
}
Я запускал этот тестовый код много раз, у меня не было ошибок, и программа успешно завершилась, потому что я вижу «test» на консоли. Но файл всегда пуст.
Кстати, sudo chmod +777 log
было сделано. Так что это не может быть проблемой разрешения.
Проблема здесь:
fstream logFile;
logFile.open("log", std::ios::app);
Что мне нужно это:
Если файла нет, создайте его и напишите в нем сообщение;
Если там был файл, добавьте в него сообщение.
Для достижения этой цели у нас есть два пути:
ofstream logFile;
logFile.open("log", std::ios::app);
ИЛИ ЖЕ
fstream logFile;
logFile.open("log", std::ios::app | std::ios::out);