From 11a23fc280f5fc7a0d4af50ca73f87b96d2dab6f Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 15 Oct 2003 18:50:16 +0000 Subject: [PATCH] clean up logging, allow user to specify log files If DebugLogFile is specified, log to it at -l debug If LogFile is specified, log to it at the -l from the commandline (default info) If no LogFile *and* not a Daemon, then log to stdout. Make conn->s = -1 by default (this might break things) When kill -USR1, prefer to log at INFO, but make sure they always see it. svn:r596 --- src/common/log.c | 5 ----- src/or/config.c | 6 ++++-- src/or/connection.c | 3 ++- src/or/connection_edge.c | 2 +- src/or/main.c | 14 +++++++++++--- src/or/or.h | 4 +++- 6 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/common/log.c b/src/common/log.c index c66c430568..faa8f64891 100644 --- a/src/common/log.c +++ b/src/common/log.c @@ -75,11 +75,6 @@ logv(int severity, const char *funcname, const char *format, va_list ap) assert(format); if (severity < loglevel) return; - if (!logfiles) { - /* XXX This is a temporary measure until we get configuration support - for logfiles. */ - add_stream_log(loglevel, "", stdout); - } for (lf = logfiles; lf; lf = lf->next) { if (severity < lf->loglevel || severity > lf->max_loglevel) continue; diff --git a/src/or/config.c b/src/or/config.c index 2402a64e9b..977af49816 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -151,6 +151,8 @@ static void config_assign(or_options_t *options, struct config_line *list) { /* string options */ config_compare(list, "LogLevel", CONFIG_TYPE_STRING, &options->LogLevel) || + config_compare(list, "LogFile", CONFIG_TYPE_STRING, &options->LogFile) || + config_compare(list, "DebugLogFile", CONFIG_TYPE_STRING, &options->DebugLogFile) || config_compare(list, "DataDirectory", CONFIG_TYPE_STRING, &options->DataDirectory) || config_compare(list, "RouterFile", CONFIG_TYPE_STRING, &options->RouterFile) || config_compare(list, "PidFile", CONFIG_TYPE_STRING, &options->PidFile) || @@ -171,10 +173,10 @@ static void config_assign(or_options_t *options, struct config_line *list) { config_compare(list, "NumCpus", CONFIG_TYPE_INT, &options->NumCpus) || config_compare(list, "OnionRouter", CONFIG_TYPE_BOOL, &options->OnionRouter) || - config_compare(list, "Daemon", CONFIG_TYPE_BOOL, &options->Daemon) || config_compare(list, "TrafficShaping", CONFIG_TYPE_BOOL, &options->TrafficShaping) || config_compare(list, "LinkPadding", CONFIG_TYPE_BOOL, &options->LinkPadding) || config_compare(list, "IgnoreVersion", CONFIG_TYPE_BOOL, &options->IgnoreVersion) || + config_compare(list, "RunAsDaemon", CONFIG_TYPE_BOOL, &options->RunAsDaemon) || /* float options */ config_compare(list, "CoinWeight", CONFIG_TYPE_DOUBLE, &options->CoinWeight) @@ -201,7 +203,7 @@ int getconfig(int argc, char **argv, or_options_t *options) { memset(options,0,sizeof(or_options_t)); options->LogLevel = "info"; options->ExitPolicy = "reject 127.0.0.1:*,reject 18.244.0.188:25,accept *:*"; - options->loglevel = LOG_DEBUG; + options->loglevel = LOG_INFO; options->PidFile = "tor.pid"; options->DataDirectory = NULL; options->CoinWeight = 0.1; diff --git a/src/or/connection.c b/src/or/connection.c index 852199c395..2c8a0032a0 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -78,6 +78,7 @@ connection_t *connection_new(int type) { conn = (connection_t *)tor_malloc(sizeof(connection_t)); memset(conn,0,sizeof(connection_t)); /* zero it out to start */ + conn->s = -1; /* give it a default of 'not used' */ conn->type = type; if(!connection_is_listener(conn)) { /* listeners never use their buf */ @@ -117,7 +118,7 @@ void connection_free(connection_t *conn) { if (conn->nickname) free(conn->nickname); - if(conn->s > 0) { + if(conn->s >= 0) { log_fn(LOG_INFO,"closing fd %d.",conn->s); close(conn->s); } diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index e4149831d0..b79da2d088 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -557,7 +557,7 @@ static int connection_ap_handshake_socks_reply(connection_t *conn, char *reply, n_stream->address = tor_strdup(cell->payload + RELAY_HEADER_SIZE + STREAM_ID_SIZE); n_stream->port = atoi(colon+1); n_stream->state = EXIT_CONN_STATE_RESOLVING; - n_stream->s = -1; /* not yet valid */ + /* leave n_stream->s at -1, because it's not yet valid */ n_stream->package_window = STREAMWINDOW_START; n_stream->deliver_window = STREAMWINDOW_START; if(connection_add(n_stream) < 0) { /* no space, forget it */ diff --git a/src/or/main.c b/src/or/main.c index 61cf4e3cfd..c4bd560d99 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -601,7 +601,8 @@ static int do_main_loop(void) { for(;;) { #ifndef MS_WIN32 /* do signal stuff only on unix */ if(please_dumpstats) { - dumpstats(LOG_INFO); + /* prefer to log it at INFO, but make sure we always see it */ + dumpstats(options.loglevel>LOG_INFO ? options.loglevel : LOG_INFO); please_dumpstats = 0; } if(please_reset) { @@ -774,14 +775,21 @@ int tor_main(int argc, char *argv[]) { log_fn(LOG_ERR,"Reading config file failed. exiting."); return -1; } - log_set_severity(options.loglevel); /* assign logging severity level from options */ + log_set_severity(options.loglevel); /* assign logging severity level from options */ + if(options.DebugLogFile) + add_file_log(LOG_DEBUG, options.DebugLogFile); + if(options.LogFile) + add_file_log(options.loglevel, options.LogFile); + if(!options.LogFile && !options.RunAsDaemon) + add_stream_log(options.loglevel, "", stdout); + global_read_bucket = options.TotalBandwidth; /* start it at 1 second of traffic */ stats_prev_global_read_bucket = global_read_bucket; /* write our pid to the pid file */ write_pidfile(options.PidFile); - if(options.Daemon) + if(options.RunAsDaemon) daemonize(); if(options.OnionRouter) { /* only spawn dns handlers if we're a router */ diff --git a/src/or/or.h b/src/or/or.h index 7a8d715477..be014fff98 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -416,6 +416,8 @@ typedef struct circuit_t circuit_t; typedef struct { char *LogLevel; + char *LogFile; + char *DebugLogFile; char *DataDirectory; char *RouterFile; char *Nickname; @@ -423,7 +425,6 @@ typedef struct { char *PidFile; char *ExitPolicy; double CoinWeight; - int Daemon; int ORPort; int APPort; int DirPort; @@ -432,6 +433,7 @@ typedef struct { int TrafficShaping; int LinkPadding; int IgnoreVersion; + int RunAsDaemon; int DirRebuildPeriod; int DirFetchPostPeriod; int KeepalivePeriod;