Avoid evaluating log arguments when log filtered by level. (#8685)
This commit is contained in:
parent
a2af2a306b
commit
d026647f4f
@ -1161,12 +1161,10 @@ void serverLogRaw(int level, const char *msg) {
|
||||
/* Like serverLogRaw() but with printf-alike support. This is the function that
|
||||
* is used across the code. The raw version is only used in order to dump
|
||||
* the INFO output on crash. */
|
||||
void serverLog(int level, const char *fmt, ...) {
|
||||
void _serverLog(int level, const char *fmt, ...) {
|
||||
va_list ap;
|
||||
char msg[LOG_MAX_LEN];
|
||||
|
||||
if ((level&0xff) < server.verbosity) return;
|
||||
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(msg, sizeof(msg), fmt, ap);
|
||||
va_end(ap);
|
||||
|
11
src/server.h
11
src/server.h
@ -2210,10 +2210,10 @@ void preventCommandAOF(client *c);
|
||||
void preventCommandReplication(client *c);
|
||||
int prepareForShutdown(int flags);
|
||||
#ifdef __GNUC__
|
||||
void serverLog(int level, const char *fmt, ...)
|
||||
void _serverLog(int level, const char *fmt, ...)
|
||||
__attribute__((format(printf, 2, 3)));
|
||||
#else
|
||||
void serverLog(int level, const char *fmt, ...);
|
||||
void _serverLog(int level, const char *fmt, ...);
|
||||
#endif
|
||||
void serverLogRaw(int level, const char *msg);
|
||||
void serverLogFromHandler(int level, const char *msg);
|
||||
@ -2719,6 +2719,13 @@ void killIOThreads(void);
|
||||
void killThreads(void);
|
||||
void makeThreadKillable(void);
|
||||
|
||||
/* Use macro for checking log level to avoid evaluating arguments in cases log
|
||||
* should be ignored due to low level. */
|
||||
#define serverLog(level, ...) do {\
|
||||
if (((level)&0xff) < server.verbosity) break;\
|
||||
_serverLog(level, __VA_ARGS__);\
|
||||
} while(0)
|
||||
|
||||
/* TLS stuff */
|
||||
void tlsInit(void);
|
||||
void tlsCleanup(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user