次の方法でlog4cppでログを有効にしようとしています。
class Foo
{
private:
log4cpp::Appender* _logAppender;
log4cpp::Layout* _logAppenderLayout;
}
Foo::Foo()
{
_logAppender = new log4cpp::FileAppender("foo", "logs/bar.log"));
_logAppenderLayout = new log4cpp::BasicLayout();
_logAppender.setLayout(_logAppenderLayout);
log4cpp::Category::getRoot().setPriority(log4cpp::Priority::DEBUG);
log4cpp::Category::getRoot().addAppender(_logAppender);
// Crash on line below.
log4cpp::Category::getRoot().debugStream() << "test";
}
ログに「test」を書き込もうとしている行に到達すると、「Debug Assertion Failed!」というクラッシュが発生します。アサーションは f:\dd\vctools\crt_bld_self_64_amd64\crt\src\write.c 行 67 にあります。失敗するアサートは次のとおりです。
fh >= 0 && (unsigned)fh < (unsigned)_nhandle
存在することを確認するために、ログ ディレクトリと bar.log ファイルを作成しました。また、アプリケーションとライブラリの両方が 64 ビット マルチスレッド デバッグ DLL としてビルドされていることも確認しました。log4cpp ソースには 64 ビット ビルドがなかったので、32 ビット ビルド構成に基づいて作成しました。log4cpp の最新バージョンを使用しています。