log: removed warning buffer
The warning buffer is a complex piece of code for no good reason. Remove it and find a better solution, e.g. open the log file earlier.
This commit is contained in:
parent
b35ca9e5c4
commit
08aaf57ff0
78
src/log.c
78
src/log.c
@ -36,10 +36,7 @@
|
|||||||
#define LOG_DATE_BUF_SIZE 16
|
#define LOG_DATE_BUF_SIZE 16
|
||||||
#define LOG_DATE_LEN (LOG_DATE_BUF_SIZE - 1)
|
#define LOG_DATE_LEN (LOG_DATE_BUF_SIZE - 1)
|
||||||
static unsigned int logLevel = LOG_LEVEL_LOW;
|
static unsigned int logLevel = LOG_LEVEL_LOW;
|
||||||
static int warningFlushed;
|
|
||||||
static int stdout_mode = 1;
|
static int stdout_mode = 1;
|
||||||
static char *warningBuffer;
|
|
||||||
static pthread_mutex_t warning_buffer_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
static int out_fd = -1;
|
static int out_fd = -1;
|
||||||
static int err_fd = -1;
|
static int err_fd = -1;
|
||||||
static const char *out_filename;
|
static const char *out_filename;
|
||||||
@ -63,32 +60,6 @@ static const char *log_date(void)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BUFFER_LENGTH 4096
|
|
||||||
static void buffer_warning(const char *fmt, va_list args)
|
|
||||||
{
|
|
||||||
char buffer[BUFFER_LENGTH];
|
|
||||||
char *tmp = buffer;
|
|
||||||
size_t len = BUFFER_LENGTH;
|
|
||||||
|
|
||||||
if (!stdout_mode) {
|
|
||||||
memcpy(buffer, log_date(), LOG_DATE_LEN);
|
|
||||||
tmp += LOG_DATE_LEN;
|
|
||||||
len -= LOG_DATE_LEN;
|
|
||||||
}
|
|
||||||
|
|
||||||
vsnprintf(tmp, len, fmt, args);
|
|
||||||
|
|
||||||
if (warningBuffer == NULL)
|
|
||||||
warningBuffer = g_strdup(tmp);
|
|
||||||
else {
|
|
||||||
tmp = g_strconcat(warningBuffer, tmp, NULL);
|
|
||||||
g_free(warningBuffer);
|
|
||||||
warningBuffer = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void do_log(FILE *fp, const char *fmt, va_list args)
|
static void do_log(FILE *fp, const char *fmt, va_list args)
|
||||||
{
|
{
|
||||||
if (!stdout_mode)
|
if (!stdout_mode)
|
||||||
@ -96,34 +67,6 @@ static void do_log(FILE *fp, const char *fmt, va_list args)
|
|||||||
vfprintf(fp, fmt, args);
|
vfprintf(fp, fmt, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void flushWarningLog(void)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
pthread_mutex_lock(&warning_buffer_lock);
|
|
||||||
s = warningBuffer;
|
|
||||||
|
|
||||||
DEBUG("flushing warning messages\n");
|
|
||||||
|
|
||||||
if (warningBuffer != NULL)
|
|
||||||
{
|
|
||||||
while (s != NULL) {
|
|
||||||
char *next = strchr(s, '\n');
|
|
||||||
if (next == NULL) break;
|
|
||||||
*next = '\0';
|
|
||||||
next++;
|
|
||||||
fprintf(stderr, "%s\n", s);
|
|
||||||
s = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
warningBuffer = NULL;
|
|
||||||
}
|
|
||||||
warningFlushed = 1;
|
|
||||||
pthread_mutex_unlock(&warning_buffer_lock);
|
|
||||||
|
|
||||||
DEBUG("done flushing warning messages\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void initLog(const int verbose)
|
void initLog(const int verbose)
|
||||||
{
|
{
|
||||||
ConfigParam *param;
|
ConfigParam *param;
|
||||||
@ -154,10 +97,8 @@ void open_log_files(const int use_stdout)
|
|||||||
mode_t prev;
|
mode_t prev;
|
||||||
ConfigParam *param;
|
ConfigParam *param;
|
||||||
|
|
||||||
if (use_stdout) {
|
if (use_stdout)
|
||||||
flushWarningLog();
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
prev = umask(0066);
|
prev = umask(0066);
|
||||||
param = parseConfigFilePath(CONF_LOG_FILE, 1);
|
param = parseConfigFilePath(CONF_LOG_FILE, 1);
|
||||||
@ -183,7 +124,6 @@ void setup_log_output(const int use_stdout)
|
|||||||
if (!use_stdout) {
|
if (!use_stdout) {
|
||||||
redirect_logs();
|
redirect_logs();
|
||||||
stdout_mode = 0;
|
stdout_mode = 0;
|
||||||
flushWarningLog();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,27 +139,13 @@ mpd_printf void func(const char *fmt, ...) \
|
|||||||
}
|
}
|
||||||
|
|
||||||
log_func(ERROR, 0, stderr)
|
log_func(ERROR, 0, stderr)
|
||||||
|
log_func(WARNING, 0, stderr)
|
||||||
log_func(LOG, 0, stdout)
|
log_func(LOG, 0, stdout)
|
||||||
log_func(SECURE, LOG_LEVEL_SECURE, stdout)
|
log_func(SECURE, LOG_LEVEL_SECURE, stdout)
|
||||||
log_func(DEBUG, LOG_LEVEL_DEBUG, stdout)
|
log_func(DEBUG, LOG_LEVEL_DEBUG, stdout)
|
||||||
|
|
||||||
#undef log_func
|
#undef log_func
|
||||||
|
|
||||||
void WARNING(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start(args, fmt);
|
|
||||||
|
|
||||||
pthread_mutex_lock(&warning_buffer_lock);
|
|
||||||
if (warningFlushed)
|
|
||||||
do_log(stderr, fmt, args);
|
|
||||||
else
|
|
||||||
buffer_warning(fmt, args);
|
|
||||||
pthread_mutex_unlock(&warning_buffer_lock);
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
mpd_printf mpd_noreturn void FATAL(const char *fmt, ...)
|
mpd_printf mpd_noreturn void FATAL(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -42,6 +42,4 @@ int cycle_log_files(void);
|
|||||||
|
|
||||||
void close_log_files(void);
|
void close_log_files(void);
|
||||||
|
|
||||||
void flushWarningLog(void);
|
|
||||||
|
|
||||||
#endif /* LOG_H */
|
#endif /* LOG_H */
|
||||||
|
@ -277,7 +277,6 @@ static void openDB(Options * options, char *argv0)
|
|||||||
"\"--no-create-db\" command line option\n"
|
"\"--no-create-db\" command line option\n"
|
||||||
"try running \"%s --create-db\"\n", argv0);
|
"try running \"%s --create-db\"\n", argv0);
|
||||||
}
|
}
|
||||||
flushWarningLog();
|
|
||||||
if (db_check() < 0)
|
if (db_check() < 0)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
db_init();
|
db_init();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user