【问题标题】:Log4cxx : set Threshold on appenderLog4cxx:在附加程序上设置阈值
【发布时间】:2012-10-09 13:48:55
【问题描述】:

我是 log4cxx 的新手。 我尝试为 appender 设置阈值。在我的代码中,我得到了 appender TERMINAL(它将写入我的 xterm 窗口)。

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

我将设置这个附加程序的级别为 OFF 或 ALL。 我已经看到 AppenderSkeleton 类有一个方法 setThreshold(log4cxx::Level)。 但我不知道如何将我的 Appender 转换为 AppenderSkeleton。

感谢您的帮助!

【问题讨论】:

    标签: appender log4cxx


    【解决方案1】:

    我已经为我的开发案例找到了解决方案。我将得到我所有的附加程序,并测试它们中的每一个。我需要知道它们是控制台还是文件附加器。

    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() );
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您在记录器级别设置级别,而不是附加程序。查看文档 - http://logging.apache.org/log4cxx/

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

      所以在你的情况下:

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

      【讨论】:

      • 但是如果您有例如记录器: logger1 设置为 ALL, logger2 设置为 Error ,以及两个附加程序(一个控制台,一个文件)。一次,您只希望在控制台中显示错误日志,但将所有配置的日志保留在文件中。您必须在控制台附加程序中设置阈值。
      猜你喜欢
      • 2015-01-13
      • 2012-07-31
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多