Skip to content

Commit 9aee3dd

Browse files
committed
Make logs more efficient by avoiding argument evaluation for LOG* if
it's not needed at the current level
1 parent 856cb0f commit 9aee3dd

File tree

4 files changed

+56
-21
lines changed

4 files changed

+56
-21
lines changed

cmdline.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -555,13 +555,13 @@ std::unique_ptr<nsjconf_t> parseArgs(int argc, char* argv[]) {
555555
nsjconf->daemonize = true;
556556
break;
557557
case 'v':
558-
logs::logLevel(logs::DEBUG);
558+
logs::setLogLevel(logs::DEBUG);
559559
break;
560560
case 'q':
561-
logs::logLevel(logs::WARNING);
561+
logs::setLogLevel(logs::WARNING);
562562
break;
563563
case 'Q':
564-
logs::logLevel(logs::FATAL);
564+
logs::setLogLevel(logs::FATAL);
565565
break;
566566
case 'e':
567567
nsjconf->keep_env = true;

config.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,19 @@ static bool configParseInternal(nsjconf_t* nsjconf, const nsjail::NsJailConfig&
102102
if (njc.has_log_level()) {
103103
switch (njc.log_level()) {
104104
case nsjail::LogLevel::DEBUG:
105-
logs::logLevel(logs::DEBUG);
105+
logs::setLogLevel(logs::DEBUG);
106106
break;
107107
case nsjail::LogLevel::INFO:
108-
logs::logLevel(logs::INFO);
108+
logs::setLogLevel(logs::INFO);
109109
break;
110110
case nsjail::LogLevel::WARNING:
111-
logs::logLevel(logs::WARNING);
111+
logs::setLogLevel(logs::WARNING);
112112
break;
113113
case nsjail::LogLevel::ERROR:
114-
logs::logLevel(logs::ERROR);
114+
logs::setLogLevel(logs::ERROR);
115115
break;
116116
case nsjail::LogLevel::FATAL:
117-
logs::logLevel(logs::FATAL);
117+
logs::setLogLevel(logs::FATAL);
118118
break;
119119
default:
120120
LOG_E("Unknown log_level: %d", njc.log_level());

logs.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,14 @@ bool logSet() {
7070
return _log_set;
7171
}
7272

73-
void logLevel(enum llevel_t ll) {
73+
void setLogLevel(enum llevel_t ll) {
7474
_log_level = ll;
7575
}
7676

77+
enum llevel_t getLogLevel(void) {
78+
return _log_level;
79+
}
80+
7781
void logFile(const std::string& log_file, int log_fd) {
7882
_log_set = true;
7983
int newlogfd = -1;

logs.h

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,47 @@ namespace logs {
3333
#define LOG_HELP_BOLD(...) \
3434
logs::logMsg(logs::HELP_BOLD, __FUNCTION__, __LINE__, false, __VA_ARGS__);
3535

36-
#define LOG_D(...) logs::logMsg(logs::DEBUG, __FUNCTION__, __LINE__, false, __VA_ARGS__);
37-
#define LOG_I(...) logs::logMsg(logs::INFO, __FUNCTION__, __LINE__, false, __VA_ARGS__);
38-
#define LOG_W(...) logs::logMsg(logs::WARNING, __FUNCTION__, __LINE__, false, __VA_ARGS__);
39-
#define LOG_E(...) logs::logMsg(logs::ERROR, __FUNCTION__, __LINE__, false, __VA_ARGS__);
40-
#define LOG_F(...) logs::logMsg(logs::FATAL, __FUNCTION__, __LINE__, false, __VA_ARGS__);
41-
42-
#define PLOG_D(...) logs::logMsg(logs::DEBUG, __FUNCTION__, __LINE__, true, __VA_ARGS__);
43-
#define PLOG_I(...) logs::logMsg(logs::INFO, __FUNCTION__, __LINE__, true, __VA_ARGS__);
44-
#define PLOG_W(...) logs::logMsg(logs::WARNING, __FUNCTION__, __LINE__, true, __VA_ARGS__);
45-
#define PLOG_E(...) logs::logMsg(logs::ERROR, __FUNCTION__, __LINE__, true, __VA_ARGS__);
46-
#define PLOG_F(...) logs::logMsg(logs::FATAL, __FUNCTION__, __LINE__, true, __VA_ARGS__);
36+
#define LOG_D(...) \
37+
if (logs::getLogLevel() <= logs::DEBUG) { \
38+
logs::logMsg(logs::DEBUG, __FUNCTION__, __LINE__, false, __VA_ARGS__); \
39+
}
40+
#define LOG_I(...) \
41+
if (logs::getLogLevel() <= logs::INFO) { \
42+
logs::logMsg(logs::INFO, __FUNCTION__, __LINE__, false, __VA_ARGS__); \
43+
}
44+
#define LOG_W(...) \
45+
if (logs::getLogLevel() <= logs::WARNING) { \
46+
logs::logMsg(logs::WARNING, __FUNCTION__, __LINE__, false, __VA_ARGS__); \
47+
}
48+
#define LOG_E(...) \
49+
if (logs::getLogLevel() <= logs::ERROR) { \
50+
logs::logMsg(logs::ERROR, __FUNCTION__, __LINE__, false, __VA_ARGS__); \
51+
}
52+
#define LOG_F(...) \
53+
if (logs::getLogLevel() <= logs::FATAL) { \
54+
logs::logMsg(logs::FATAL, __FUNCTION__, __LINE__, false, __VA_ARGS__); \
55+
}
56+
57+
#define PLOG_D(...) \
58+
if (logs::getLogLevel() <= logs::DEBUG) { \
59+
logs::logMsg(logs::DEBUG, __FUNCTION__, __LINE__, true, __VA_ARGS__); \
60+
}
61+
#define PLOG_I(...) \
62+
if (logs::getLogLevel() <= logs::INFO) { \
63+
logs::logMsg(logs::INFO, __FUNCTION__, __LINE__, true, __VA_ARGS__); \
64+
}
65+
#define PLOG_W(...) \
66+
if (logs::getLogLevel() <= logs::WARNING) { \
67+
logs::logMsg(logs::WARNING, __FUNCTION__, __LINE__, true, __VA_ARGS__); \
68+
}
69+
#define PLOG_E(...) \
70+
if (logs::getLogLevel() <= logs::ERROR) { \
71+
logs::logMsg(logs::ERROR, __FUNCTION__, __LINE__, true, __VA_ARGS__); \
72+
}
73+
#define PLOG_F(...) \
74+
if (logs::getLogLevel() <= logs::FATAL) { \
75+
logs::logMsg(logs::FATAL, __FUNCTION__, __LINE__, true, __VA_ARGS__); \
76+
}
4777

4878
enum llevel_t {
4979
DEBUG = 0,
@@ -58,7 +88,8 @@ enum llevel_t {
5888
void logMsg(enum llevel_t ll, const char* fn, int ln, bool perr, const char* fmt, ...)
5989
__attribute__((format(printf, 5, 6)));
6090
void logStop(int sig);
61-
void logLevel(enum llevel_t ll);
91+
void setLogLevel(enum llevel_t ll);
92+
enum llevel_t getLogLevel(void);
6293
void logFile(const std::string& log_file, int log_fd);
6394
bool logSet();
6495

0 commit comments

Comments
 (0)