2

Linux で cpp を使用していますが、log4cpp を使用したいと考えています。

vs2013のWindowsで使用しようとしましたが、非常にうまく機能しました。今、私は 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出来ました。したがって、許可の問題ではありません。

4

1 に答える 1

2

問題はここにあります:

 fstream logFile;
 logFile.open("log", std::ios::app);

私が必要とする
のは、ファイルがない場合は、作成してメッセージを書き込むことです。
ファイルが存在する場合は、その中にメッセージを追加します。

この目標を達成するには、次の 2 つの方法があります。

 ofstream logFile;
 logFile.open("log", std::ios::app);

また

 fstream logFile;
 logFile.open("log", std::ios::app | std::ios::out);
于 2015-04-24T15:46:32.807 に答える