The log_message() function now stores the messages if the configuration
file has not been read yet. The reason for this is that we don't know where to log the messgaes until _after_ the config file has been processed.
This commit is contained in:
parent
60f61c8f0c
commit
2ec7a4dd72
64
src/log.c
64
src/log.c
@ -1,4 +1,4 @@
|
||||
/* $Id: log.c,v 1.16 2001-11-22 00:31:10 rjkaes Exp $
|
||||
/* $Id: log.c,v 1.17 2002-04-22 19:34:19 rjkaes Exp $
|
||||
*
|
||||
* Logs the various messages which tinyproxy produces to either a log file or
|
||||
* the syslog daemon. Not much to it...
|
||||
@ -19,6 +19,7 @@
|
||||
|
||||
#include "tinyproxy.h"
|
||||
|
||||
#include "hashmap.h"
|
||||
#include "log.h"
|
||||
|
||||
static char *syslog_level[] = {
|
||||
@ -39,13 +40,21 @@ static char *syslog_level[] = {
|
||||
/*
|
||||
* Store the log level setting.
|
||||
*/
|
||||
static short int log_level = LOG_ERR;
|
||||
static int log_level = LOG_INFO;
|
||||
|
||||
/*
|
||||
* Hold a listing of log messages which need to be sent once the log
|
||||
* file has been established.
|
||||
* The key is the actual messages (already filled in full), and the value
|
||||
* is the log level.
|
||||
*/
|
||||
static hashmap_t log_message_storage;
|
||||
|
||||
/*
|
||||
* Set the log level for writing to the log file.
|
||||
*/
|
||||
void
|
||||
set_log_level(short int level)
|
||||
set_log_level(int level)
|
||||
{
|
||||
log_level = level;
|
||||
}
|
||||
@ -54,7 +63,7 @@ set_log_level(short int level)
|
||||
* This routine logs messages to either the log file or the syslog function.
|
||||
*/
|
||||
void
|
||||
log_message(short int level, char *fmt, ...)
|
||||
log_message(int level, char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
time_t nowtime;
|
||||
@ -86,6 +95,30 @@ log_message(short int level, char *fmt, ...)
|
||||
|
||||
va_start(args, fmt);
|
||||
|
||||
/*
|
||||
* If the config file hasn't been processed, then we need to store
|
||||
* the messages for later processing.
|
||||
*/
|
||||
if (!processed_config_file) {
|
||||
char string_level[4];
|
||||
|
||||
if (!log_message_storage) {
|
||||
log_message_storage = hashmap_create(1);
|
||||
if (!log_message_storage)
|
||||
return;
|
||||
}
|
||||
|
||||
vsnprintf(str, STRING_LENGTH, fmt, args);
|
||||
snprintf(string_level, 4, "%d", level);
|
||||
|
||||
hashmap_insert(log_message_storage, str,
|
||||
string_level, strlen(string_level) + 1);
|
||||
|
||||
va_end(args);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
if (config.syslog) {
|
||||
# ifdef HAVE_VSYSLOG_H
|
||||
@ -115,3 +148,26 @@ log_message(short int level, char *fmt, ...)
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
/*
|
||||
* This needs to send any stored log messages.
|
||||
*/
|
||||
void
|
||||
send_stored_logs(void)
|
||||
{
|
||||
vector_t messages;
|
||||
char *level;
|
||||
char *string;
|
||||
int i;
|
||||
|
||||
messages = hashmap_keys(log_message_storage);
|
||||
for (i = 0; i < vector_length(messages); i++) {
|
||||
vector_getentry(messages, i, (void **)&string);
|
||||
hashmap_search(log_message_storage, string, (void **)&level);
|
||||
|
||||
log_message(atoi(level), string);
|
||||
}
|
||||
vector_delete(messages);
|
||||
hashmap_delete(log_message_storage);
|
||||
log_message_storage = NULL;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: log.h,v 1.8 2001-11-22 00:31:10 rjkaes Exp $
|
||||
/* $Id: log.h,v 1.9 2002-04-22 19:34:19 rjkaes Exp $
|
||||
*
|
||||
* See 'log.c' for a detailed description.
|
||||
*
|
||||
@ -99,7 +99,8 @@
|
||||
# define DEBUG2(x, y...) do { } while(0)
|
||||
#endif
|
||||
|
||||
extern void log_message(short int level, char *fmt, ...);
|
||||
extern void set_log_level(short int level);
|
||||
extern void log_message(int level, char *fmt, ...);
|
||||
extern void set_log_level(int level);
|
||||
extern void send_stored_logs(void);
|
||||
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: tinyproxy.c,v 1.27 2002-04-18 17:59:21 rjkaes Exp $
|
||||
/* $Id: tinyproxy.c,v 1.28 2002-04-22 19:34:20 rjkaes Exp $
|
||||
*
|
||||
* The initialise routine. Basically sets up all the initial stuff (logfile,
|
||||
* listening socket, config options, etc.) and then sits there and loops
|
||||
@ -45,6 +45,8 @@ extern FILE *yyin;
|
||||
struct config_s config;
|
||||
float load = 0.00;
|
||||
bool_t log_rotation_request = FALSE;
|
||||
char* bind_address = NULL;
|
||||
bool_t processed_config_file = FALSE;
|
||||
|
||||
/*
|
||||
* Handle a signal
|
||||
@ -199,6 +201,7 @@ main(int argc, char **argv)
|
||||
exit(EX_SOFTWARE);
|
||||
}
|
||||
yyparse();
|
||||
processed_config_file = TRUE;
|
||||
|
||||
#if defined(TUNNEL_SUPPORT) && defined(UPSTREAM_SUPPORT)
|
||||
if (config.tunnel_name && config.upstream_name) {
|
||||
@ -243,6 +246,8 @@ main(int argc, char **argv)
|
||||
|
||||
log_message(LOG_INFO, PACKAGE " " VERSION " starting...");
|
||||
|
||||
send_stored_logs();
|
||||
|
||||
/*
|
||||
* Set the default values if they were not set in the config file.
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: tinyproxy.h,v 1.28 2002-04-18 16:57:06 rjkaes Exp $
|
||||
/* $Id: tinyproxy.h,v 1.29 2002-04-22 19:34:20 rjkaes Exp $
|
||||
*
|
||||
* See 'tinyproxy.c' for a detailed description.
|
||||
*
|
||||
@ -219,5 +219,7 @@ struct config_s {
|
||||
/* Global Structures used in the program */
|
||||
extern struct config_s config;
|
||||
extern bool_t log_rotation_request;
|
||||
extern char* bind_address;
|
||||
extern bool_t processed_config_file;
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user