Unify logging facilities. (#3982)
* Unify logging facilities. * Enhance `ConsoleLogger` to handle different verbosity. * Override macros from `dmlc`. * Don't use specialized gamma when building with GPU. * Remove verbosity cache in monitor. * Test monitor. * Deprecate `silent`. * Fix doc and messages. * Fix python test. * Fix silent tests.
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
/*!
|
||||
* Copyright 2015 by Contributors
|
||||
* Copyright 2015-2018 by Contributors
|
||||
* \file logging.cc
|
||||
* \brief Implementation of loggers.
|
||||
* \author Tianqi Chen
|
||||
*/
|
||||
#include <rabit/rabit.h>
|
||||
#include <dmlc/parameter.h>
|
||||
#include <xgboost/logging.h>
|
||||
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
|
||||
#if !defined(XGBOOST_STRICT_R_MODE) || XGBOOST_STRICT_R_MODE == 0
|
||||
// Override logging mechanism for non-R interfaces
|
||||
@@ -18,8 +21,12 @@ void dmlc::CustomLogMessage::Log(const std::string& msg) {
|
||||
}
|
||||
|
||||
namespace xgboost {
|
||||
|
||||
ConsoleLogger::~ConsoleLogger() {
|
||||
dmlc::CustomLogMessage::Log(log_stream_.str());
|
||||
if (cur_verbosity_ == LogVerbosity::kIgnore ||
|
||||
cur_verbosity_ <= global_verbosity_) {
|
||||
dmlc::CustomLogMessage::Log(BaseLogger::log_stream_.str());
|
||||
}
|
||||
}
|
||||
|
||||
TrackerLogger::~TrackerLogger() {
|
||||
@@ -28,4 +35,71 @@ TrackerLogger::~TrackerLogger() {
|
||||
}
|
||||
|
||||
} // namespace xgboost
|
||||
|
||||
#endif
|
||||
|
||||
namespace xgboost {
|
||||
|
||||
DMLC_REGISTER_PARAMETER(ConsoleLoggerParam);
|
||||
|
||||
ConsoleLogger::LogVerbosity ConsoleLogger::global_verbosity_ =
|
||||
ConsoleLogger::DefaultVerbosity();
|
||||
|
||||
ConsoleLoggerParam ConsoleLogger::param_ = ConsoleLoggerParam();
|
||||
void ConsoleLogger::Configure(const std::map<std::string, std::string>& args) {
|
||||
param_.InitAllowUnknown(args);
|
||||
// Deprecated, but when trying to display deprecation message some R
|
||||
// tests trying to catch stdout will fail.
|
||||
if (param_.silent) {
|
||||
global_verbosity_ = LogVerbosity::kSilent;
|
||||
return;
|
||||
}
|
||||
switch (param_.verbosity) {
|
||||
case 0:
|
||||
global_verbosity_ = LogVerbosity::kSilent;
|
||||
break;
|
||||
case 1:
|
||||
global_verbosity_ = LogVerbosity::kWarning;
|
||||
break;
|
||||
case 2:
|
||||
global_verbosity_ = LogVerbosity::kInfo;
|
||||
break;
|
||||
case 3:
|
||||
global_verbosity_ = LogVerbosity::kDebug;
|
||||
default:
|
||||
// global verbosity doesn't require kIgnore
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ConsoleLogger::LogVerbosity ConsoleLogger::DefaultVerbosity() {
|
||||
return LogVerbosity::kWarning;
|
||||
}
|
||||
|
||||
ConsoleLogger::LogVerbosity ConsoleLogger::GlobalVerbosity() {
|
||||
return global_verbosity_;
|
||||
}
|
||||
|
||||
ConsoleLogger::ConsoleLogger() : cur_verbosity_{LogVerbosity::kInfo} {}
|
||||
ConsoleLogger::ConsoleLogger(LogVerbosity cur_verb) :
|
||||
cur_verbosity_{cur_verb} {}
|
||||
|
||||
ConsoleLogger::ConsoleLogger(
|
||||
const std::string& file, int line, LogVerbosity cur_verb) {
|
||||
cur_verbosity_ = cur_verb;
|
||||
switch (cur_verbosity_) {
|
||||
case LogVerbosity::kWarning:
|
||||
BaseLogger::log_stream_ << "WARNING: ";
|
||||
case LogVerbosity::kDebug:
|
||||
BaseLogger::log_stream_ << "DEBUG: ";
|
||||
case LogVerbosity::kInfo:
|
||||
BaseLogger::log_stream_ << "INFO: ";
|
||||
case LogVerbosity::kIgnore:
|
||||
BaseLogger::log_stream_ << file << ":" << line << ": ";
|
||||
break;
|
||||
case LogVerbosity::kSilent:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace xgboost
|
||||
|
||||
Reference in New Issue
Block a user