Pass info_log_level to the inner logger of AutoRollLogger (#6388)

Summary:
Before this fix, the info_log_level passed from CreateLoggerFromOptions() will
be ignored by AutoRollLogger::logger_. This PR fixes it by setting the info log
level of logger_ during ResetLogger().

Test plan (dev server):
```
COMPILE_WITH_TSAN=1 make all && make check
make all && make check
```
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6388

Differential Revision: D19828045

Pulled By: riversand963

fbshipit-source-id: e1ac7de3a2090bee53b6c667f71a11f1774163e6
This commit is contained in:
Yanqin Jin 2020-02-10 22:24:29 -08:00 committed by Facebook Github Bot
parent 35ed530d2c
commit 28aa09dcce
3 changed files with 44 additions and 0 deletions

View File

@ -59,6 +59,8 @@ Status AutoRollLogger::ResetLogger() {
if (!status_.ok()) {
return status_;
}
assert(logger_);
logger_->SetInfoLogLevel(Logger::GetInfoLogLevel());
if (logger_->GetLogFileSize() == Logger::kDoNotSupportGetLogFileSize) {
status_ = Status::NotSupported(

View File

@ -73,6 +73,24 @@ class AutoRollLogger : public Logger {
}
}
using Logger::GetInfoLogLevel;
InfoLogLevel GetInfoLogLevel() const override {
MutexLock l(&mutex_);
if (!logger_) {
return Logger::GetInfoLogLevel();
}
return logger_->GetInfoLogLevel();
}
using Logger::SetInfoLogLevel;
void SetInfoLogLevel(const InfoLogLevel log_level) override {
MutexLock lock(&mutex_);
Logger::SetInfoLogLevel(log_level);
if (logger_) {
logger_->SetInfoLogLevel(log_level);
}
}
void SetCallNowMicrosEveryNRecords(uint64_t call_NowMicros_every_N_records) {
call_NowMicros_every_N_records_ = call_NowMicros_every_N_records;
}
@ -84,6 +102,8 @@ class AutoRollLogger : public Logger {
uint64_t TEST_ctime() const { return ctime_; }
Logger* TEST_inner_logger() const { return logger_.get(); }
protected:
// Implementation of Close()
virtual Status CloseImpl() override {

View File

@ -132,6 +132,9 @@ void AutoRollLoggerTest::RollLogFileBySizeTest(AutoRollLogger* logger,
size_t log_max_size,
const std::string& log_message) {
logger->SetInfoLogLevel(InfoLogLevel::INFO_LEVEL);
ASSERT_EQ(InfoLogLevel::INFO_LEVEL, logger->GetInfoLogLevel());
ASSERT_EQ(InfoLogLevel::INFO_LEVEL,
logger->TEST_inner_logger()->GetInfoLogLevel());
// measure the size of each message, which is supposed
// to be equal or greater than log_message.size()
LogMessage(logger, log_message.c_str());
@ -221,6 +224,25 @@ TEST_F(AutoRollLoggerTest, RollLogFileByTime) {
kSampleMessage + ":RollLogFileByTime");
}
TEST_F(AutoRollLoggerTest, SetInfoLogLevel) {
InitTestDb();
Options options;
options.info_log_level = InfoLogLevel::FATAL_LEVEL;
options.max_log_file_size = 1024;
std::shared_ptr<Logger> logger;
ASSERT_OK(CreateLoggerFromOptions(kTestDir, options, &logger));
auto* auto_roll_logger = dynamic_cast<AutoRollLogger*>(logger.get());
ASSERT_NE(nullptr, auto_roll_logger);
ASSERT_EQ(InfoLogLevel::FATAL_LEVEL, auto_roll_logger->GetInfoLogLevel());
ASSERT_EQ(InfoLogLevel::FATAL_LEVEL,
auto_roll_logger->TEST_inner_logger()->GetInfoLogLevel());
auto_roll_logger->SetInfoLogLevel(InfoLogLevel::DEBUG_LEVEL);
ASSERT_EQ(InfoLogLevel::DEBUG_LEVEL, auto_roll_logger->GetInfoLogLevel());
ASSERT_EQ(InfoLogLevel::DEBUG_LEVEL, logger->GetInfoLogLevel());
ASSERT_EQ(InfoLogLevel::DEBUG_LEVEL,
auto_roll_logger->TEST_inner_logger()->GetInfoLogLevel());
}
TEST_F(AutoRollLoggerTest, OpenLogFilesMultipleTimesWithOptionLog_max_size) {
// If only 'log_max_size' options is specified, then every time
// when rocksdb is restarted, a new empty log file will be created.