conf, log: Instead of abusing log levels, add log_conf_parsed flag
We currently use a LOG_EMERG log mask to represent the fact that we don't know yet what the mask resulting from configuration should be, before the command line is parsed. However, we have the necessity of representing another phase as well, that is, configuration is parsed but we didn't daemonise yet, or we're not ready for operation yet. The next patch will add that notion explicitly. Mapping these cases to further log levels isn't really practical. Introduce boolean log flags to represent them, instead of abusing log priorities. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
bca0fefa32
commit
8c2f24a560
3 changed files with 10 additions and 10 deletions
5
conf.c
5
conf.c
|
@ -1626,9 +1626,6 @@ void conf(struct ctx *c, int argc, char **argv)
|
||||||
logfile, logsize);
|
logfile, logsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Once the log mask is not LOG_EARLY, we will no longer log to stderr
|
|
||||||
* if there was a log file specified.
|
|
||||||
*/
|
|
||||||
if (c->debug)
|
if (c->debug)
|
||||||
__setlogmask(LOG_UPTO(LOG_DEBUG));
|
__setlogmask(LOG_UPTO(LOG_DEBUG));
|
||||||
else if (c->quiet)
|
else if (c->quiet)
|
||||||
|
@ -1636,6 +1633,8 @@ void conf(struct ctx *c, int argc, char **argv)
|
||||||
else
|
else
|
||||||
__setlogmask(LOG_UPTO(LOG_INFO));
|
__setlogmask(LOG_UPTO(LOG_INFO));
|
||||||
|
|
||||||
|
log_conf_parsed = true; /* Stop printing everything */
|
||||||
|
|
||||||
nl_sock_init(c, false);
|
nl_sock_init(c, false);
|
||||||
if (!v6_only)
|
if (!v6_only)
|
||||||
c->ifi4 = conf_ip4(ifi4, &c->ip4, c->mac);
|
c->ifi4 = conf_ip4(ifi4, &c->ip4, c->mac);
|
||||||
|
|
12
log.c
12
log.c
|
@ -30,12 +30,9 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "passt.h"
|
#include "passt.h"
|
||||||
|
|
||||||
/* LOG_EARLY means we don't know yet: log everything. LOG_EMERG is unused */
|
|
||||||
#define LOG_EARLY LOG_MASK(LOG_EMERG)
|
|
||||||
|
|
||||||
static int log_sock = -1; /* Optional socket to system logger */
|
static int log_sock = -1; /* Optional socket to system logger */
|
||||||
static char log_ident[BUFSIZ]; /* Identifier string for openlog() */
|
static char log_ident[BUFSIZ]; /* Identifier string for openlog() */
|
||||||
static int log_mask = LOG_EARLY; /* Current log priority mask */
|
static int log_mask; /* Current log priority mask */
|
||||||
static int log_opt; /* Options for openlog() */
|
static int log_opt; /* Options for openlog() */
|
||||||
|
|
||||||
static int log_file = -1; /* Optional log file descriptor */
|
static int log_file = -1; /* Optional log file descriptor */
|
||||||
|
@ -45,12 +42,13 @@ static size_t log_cut_size; /* Bytes to cut at start on rotation */
|
||||||
static char log_header[BUFSIZ]; /* File header, written back on cuts */
|
static char log_header[BUFSIZ]; /* File header, written back on cuts */
|
||||||
|
|
||||||
static time_t log_start; /* Start timestamp */
|
static time_t log_start; /* Start timestamp */
|
||||||
|
|
||||||
int log_trace; /* --trace mode enabled */
|
int log_trace; /* --trace mode enabled */
|
||||||
|
bool log_conf_parsed; /* Logging options already parsed */
|
||||||
|
|
||||||
void vlogmsg(int pri, const char *format, va_list ap)
|
void vlogmsg(int pri, const char *format, va_list ap)
|
||||||
{
|
{
|
||||||
bool debug_print = (log_mask & LOG_MASK(LOG_DEBUG)) && log_file == -1;
|
bool debug_print = (log_mask & LOG_MASK(LOG_DEBUG)) && log_file == -1;
|
||||||
bool early_print = LOG_PRI(log_mask) == LOG_EARLY;
|
|
||||||
struct timespec tp;
|
struct timespec tp;
|
||||||
|
|
||||||
if (debug_print) {
|
if (debug_print) {
|
||||||
|
@ -60,7 +58,7 @@ void vlogmsg(int pri, const char *format, va_list ap)
|
||||||
(long long int)tp.tv_nsec / (100L * 1000));
|
(long long int)tp.tv_nsec / (100L * 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((log_mask & LOG_MASK(LOG_PRI(pri))) || early_print) {
|
if ((log_mask & LOG_MASK(LOG_PRI(pri))) || !log_conf_parsed) {
|
||||||
va_list ap2;
|
va_list ap2;
|
||||||
|
|
||||||
va_copy(ap2, ap); /* Don't clobber ap, we need it again */
|
va_copy(ap2, ap); /* Don't clobber ap, we need it again */
|
||||||
|
@ -72,7 +70,7 @@ void vlogmsg(int pri, const char *format, va_list ap)
|
||||||
va_end(ap2);
|
va_end(ap2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (debug_print || (early_print && !(log_opt & LOG_PERROR))) {
|
if (debug_print || (!log_conf_parsed && !(log_opt & LOG_PERROR))) {
|
||||||
(void)vfprintf(stderr, format, ap);
|
(void)vfprintf(stderr, format, ap);
|
||||||
if (format[strlen(format)] != '\n')
|
if (format[strlen(format)] != '\n')
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
|
3
log.h
3
log.h
|
@ -6,6 +6,7 @@
|
||||||
#ifndef LOG_H
|
#ifndef LOG_H
|
||||||
#define LOG_H
|
#define LOG_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
|
|
||||||
#define LOGFILE_SIZE_DEFAULT (1024 * 1024UL)
|
#define LOGFILE_SIZE_DEFAULT (1024 * 1024UL)
|
||||||
|
@ -28,6 +29,8 @@ void logmsg(int pri, const char *format, ...)
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
extern int log_trace;
|
extern int log_trace;
|
||||||
|
extern bool log_conf_parsed;
|
||||||
|
|
||||||
void trace_init(int enable);
|
void trace_init(int enable);
|
||||||
#define trace(...) \
|
#define trace(...) \
|
||||||
do { \
|
do { \
|
||||||
|
|
Loading…
Reference in a new issue