Skip to content

Commit 4405f3a

Browse files
committed
Allow user to specify log level for info_log
Summary: Currently, there is no easy way for user to change log level of info log. Add a parameter in options to specify that. Also make the default level to INFO level. Removing the [INFO] tag if it is INFO level as I don't want to cause performance regression. (add [LOG] means another mem-copy and string formatting). Test Plan: make all check manual check the levels work as expected. Reviewers: dhruba, yhchiang Reviewed By: yhchiang CC: dhruba, igor, i.am.jin.lei, ljin, haobo, leveldb Differential Revision: https://reviews.facebook.net/D16563
1 parent 8ca30bd commit 4405f3a

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

include/rocksdb/env.h

+16-6
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ class Directory {
513513
virtual Status Fsync() = 0;
514514
};
515515

516-
enum InfoLogLevel {
516+
enum InfoLogLevel : unsigned char {
517517
DEBUG = 0,
518518
INFO,
519519
WARN,
@@ -526,7 +526,7 @@ enum InfoLogLevel {
526526
class Logger {
527527
public:
528528
enum { DO_NOT_SUPPORT_GET_LOG_FILE_SIZE = -1 };
529-
explicit Logger(const InfoLogLevel log_level = InfoLogLevel::ERROR)
529+
explicit Logger(const InfoLogLevel log_level = InfoLogLevel::INFO)
530530
: log_level_(log_level) {}
531531
virtual ~Logger();
532532

@@ -543,10 +543,20 @@ class Logger {
543543
if (log_level < log_level_) {
544544
return;
545545
}
546-
char new_format[500];
547-
snprintf(new_format, sizeof(new_format) - 1, "[%s] %s",
548-
kInfoLogLevelNames[log_level], format);
549-
Logv(new_format, ap);
546+
547+
if (log_level == INFO) {
548+
// Doesn't print log level if it is INFO level.
549+
// This is to avoid unexpected performance regression after we add
550+
// the feature of log level. All the logs before we add the feature
551+
// are INFO level. We don't want to add extra costs to those existing
552+
// logging.
553+
Logv(format, ap);
554+
} else {
555+
char new_format[500];
556+
snprintf(new_format, sizeof(new_format) - 1, "[%s] %s",
557+
kInfoLogLevelNames[log_level], format);
558+
Logv(new_format, ap);
559+
}
550560
}
551561
virtual size_t GetLogFileSize() const {
552562
return DO_NOT_SUPPORT_GET_LOG_FILE_SIZE;

include/rocksdb/options.h

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class CompactionFilter;
2424
class CompactionFilterFactory;
2525
class Comparator;
2626
class Env;
27+
enum InfoLogLevel : unsigned char;
2728
class FilterPolicy;
2829
class Logger;
2930
class MergeOperator;
@@ -152,6 +153,8 @@ struct Options {
152153
// Default: nullptr
153154
shared_ptr<Logger> info_log;
154155

156+
InfoLogLevel info_log_level;
157+
155158
// -------------------
156159
// Parameters that affect performance
157160

util/auto_roll_logger.cc

+6-2
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Status CreateLoggerFromOptions(
8888
AutoRollLogger* result = new AutoRollLogger(
8989
env, dbname, db_log_dir,
9090
options.max_log_file_size,
91-
options.log_file_time_to_roll);
91+
options.log_file_time_to_roll, options.info_log_level);
9292
Status s = result->GetStatus();
9393
if (!s.ok()) {
9494
delete result;
@@ -101,7 +101,11 @@ Status CreateLoggerFromOptions(
101101
env->CreateDir(dbname); // In case it does not exist
102102
env->RenameFile(fname, OldInfoLogFileName(dbname, env->NowMicros(),
103103
db_absolute_path, db_log_dir));
104-
return env->NewLogger(fname, logger);
104+
auto s = env->NewLogger(fname, logger);
105+
if (logger->get() != nullptr) {
106+
(*logger)->SetInfoLogLevel(options.info_log_level);
107+
}
108+
return s;
105109
}
106110
}
107111

util/auto_roll_logger.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class AutoRollLogger : public Logger {
1919
AutoRollLogger(Env* env, const std::string& dbname,
2020
const std::string& db_log_dir, size_t log_max_size,
2121
size_t log_file_time_to_roll,
22-
const InfoLogLevel log_level = InfoLogLevel::ERROR)
22+
const InfoLogLevel log_level = InfoLogLevel::INFO)
2323
: Logger(log_level),
2424
dbname_(dbname),
2525
db_log_dir_(db_log_dir),

util/env.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void Log(Logger* info_log, const char* format, ...) {
4040
if (info_log) {
4141
va_list ap;
4242
va_start(ap, format);
43-
info_log->Logv(format, ap);
43+
info_log->Logv(InfoLogLevel::INFO, format, ap);
4444
va_end(ap);
4545
}
4646
}
@@ -163,7 +163,7 @@ void Log(const shared_ptr<Logger>& info_log, const char* format, ...) {
163163
if (info_log) {
164164
va_list ap;
165165
va_start(ap, format);
166-
info_log->Logv(format, ap);
166+
info_log->Logv(InfoLogLevel::INFO, format, ap);
167167
va_end(ap);
168168
}
169169
}

util/options.cc

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ Options::Options()
3838
paranoid_checks(false),
3939
env(Env::Default()),
4040
info_log(nullptr),
41+
info_log_level(INFO),
4142
write_buffer_size(4<<20),
4243
max_write_buffer_number(2),
4344
min_write_buffer_number_to_merge(1),

0 commit comments

Comments
 (0)