log4cpp (linux): невозможно записать сообщение в файл журнала

Я использую 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 было сделано. Так что это не может быть проблемой разрешения.

2

Решение

Проблема здесь:

 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);
2

Другие решения


По вопросам рекламы [email protected]