1

私はlog4cxxが初めてです。アペンダーにしきい値を設定しようとしています。私のコードでは、アペンダー TERMINAL を取得します (xterm ウィンドウに書き込みます)。

log4cxx::LoggerPtr loggerLog4cxx(log4cxx::Logger::getRootLogger());
log4cxx::AppenderPtr app = loggerLog4cxx->getAppender("TERMINAL");

このappenderにレベルOFFまたはALLを設定します。AppenderSkeleton クラスにメソッド setThreshold(log4cxx::Level) があることがわかりました。しかし、Appender を AppenderSkeleton に変換する方法がわかりません。

ご協力いただきありがとうございます!

4

2 に答える 2

3

開発ケースの解決策を見つけました。すべてのアペンダーを取得し、それぞれをテストします。それらがコンソールかファイルアペンダーかを知る必要があります。

log4cxx::LoggerPtr loggerLog4cxx(log4cxx::Logger::getRootLogger());
log4cxx::AppenderList appList = loggerLog4cxx->getAllAppenders ();

for(log4cxx::AppenderList::iterator it=appList.begin(); it!=appList.end(); it++) {
    log4cxx::ConsoleAppenderPtr console = *it;
    if( console ) {
    console->setThreshold( log4cxx::Level::getOff() );
    } else {
    log4cxx::FileAppenderPtr file = *it;
        if ( file ) {
            file->setThreshold( log4cxx::Level::getOff() );
        }
    }
}
于 2012-10-10T06:47:33.883 に答える
0

アペンダーではなく、ロガーレベルでレベルを設定します。ドキュメントを見てください - http://logging.apache.org/log4cxx/

logger->setLevel(log4cxx::Level::getInfo());

だからあなたの場合:

loggerLog4cxx->setLevel(log4cxx::Level::getInfo());

于 2012-10-09T14:04:58.613 に答える