2012-10-09 56 views
1

我是log4cxx中的新成员。 我尝试设置一个appender的阈值。在我的代码中,我得到了appender TERMINAL(它将写入我的xterm窗口中)。Log4cxx:在appender上设置阈值

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

我会将电平设置为OFF或ALL给这个appender。 我已经看到,AppenderSkeleton类有一个方法setThreshold(log4cxx :: Level)。 但我不知道如何将我的Appender转换为AppenderSkeleton。

感谢您的帮助!

回答

0

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

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

所以你的情况:

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

+0

但如果你有,例如记录器: logger1设置为ALL, logger2设置为Error, 和两个追加程序(一个控制台,一个文件)。 一次,您只需在控制台中输入错误日志,但将所有可配置的日志保留在文件中。 您必须在您的控制台appender中设置阈值。 – Shaina

1

我已经找到了我的发展情况的解决方案。我会得到我所有的appender,并测试他们每个人。我需要知道他们是否是控制台或文件appender。

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()); 
     } 
    } 
} 
相关问题