[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] Tinker with log behavior: never send error messages about l...
- To: or-cvs@freehaven.net
- Subject: [or-cvs] Tinker with log behavior: never send error messages about l...
- From: nickm@seul.org (Nick Mathewson)
- Date: Thu, 20 May 2004 15:47:31 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Thu, 20 May 2004 15:47:49 -0400
- Reply-to: or-dev@freehaven.net
- Sender: owner-or-cvs@freehaven.net
Update of /home/or/cvsroot/src/or
In directory moria.mit.edu:/tmp/cvs-serv26226/src/or
Modified Files:
config.c main.c or.h
Log Message:
Tinker with log behavior: never send error messages about logs into the bitbucket
Index: config.c
===================================================================
RCS file: /home/or/cvsroot/src/or/config.c,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -d -r1.118 -r1.119
--- config.c 20 May 2004 08:41:54 -0000 1.118
+++ config.c 20 May 2004 19:47:28 -0000 1.119
@@ -716,7 +716,7 @@
return result;
}
-static void add_single_log(struct config_line_t *level_opt,
+static int add_single_log(struct config_line_t *level_opt,
struct config_line_t *file_opt,
int isDaemon)
{
@@ -729,17 +729,21 @@
tmp_sev = tor_strndup(level_opt->value, cp - level_opt->value);
levelMin = parse_log_level(tmp_sev);
if (levelMin<0) {
- log_fn(LOG_WARN, "Unrecognized log severity %s: must be one of err|warn|notice|info|debug", tmp_sev);
+ log_fn(LOG_WARN, "Unrecognized log severity '%s': must be one of err|warn|notice|info|debug", tmp_sev);
+ return -1;
}
tor_free(tmp_sev);
levelMax = parse_log_level(cp+1);
if (levelMax<0) {
- log_fn(LOG_WARN, "Unrecognized log severity %s: must be one of err|warn|notice|info|debug", cp+1);
+ log_fn(LOG_WARN, "Unrecognized log severity '%s': must be one of err|warn|notice|info|debug", cp+1);
+ return -1;
}
} else {
levelMin = parse_log_level(level_opt->value);
if (levelMin<0) {
- log_fn(LOG_WARN, "Unrecognized log severity %s: must be one of err|warn|notice|info|debug", level_opt->value);
+ log_fn(LOG_WARN, "Unrecognized log severity '%s': must be one of err|warn|notice|info|debug", level_opt->value);
+ return -1;
+
}
}
}
@@ -753,44 +757,47 @@
}
if (file_opt) {
if (add_file_log(levelMin, levelMax, file_opt->value) < 0) {
- /* opening the log file failed! Use stderr and log a warning */
- add_stream_log(levelMin, levelMax, "<stderr>", stderr);
log_fn(LOG_WARN, "Cannot write to LogFile '%s': %s.", file_opt->value,
strerror(errno));
- return;
+ return -1;
}
log_fn(LOG_NOTICE, "Successfully opened LogFile '%s', redirecting output.",
file_opt->value);
} else if (!isDaemon) {
add_stream_log(levelMin, levelMax, "<stdout>", stdout);
+ close_temp_logs();
}
+ return 0;
}
/**
* Initialize the logs based on the configuration file.
*/
-void config_init_logs(or_options_t *options)
+int config_init_logs(or_options_t *options)
{
/* The order of options is: Level? (File Level?)+
*/
struct config_line_t *opt = options->LogOptions;
- /* Special case if nothing is specified. */
- if(!opt) {
- add_single_log(NULL, NULL, options->RunAsDaemon);
+ /* Special case if no options are given. */
+ if (!opt) {
+ add_stream_log(LOG_NOTICE, LOG_ERR, "<stdout>", stdout);
+ close_temp_logs();
/* don't return yet, in case we want to do a debuglogfile below */
}
/* Special case for if first option is LogLevel. */
if (opt && !strcasecmp(opt->key, "LogLevel")) {
if (opt->next && !strcasecmp(opt->next->key, "LogFile")) {
- add_single_log(opt, opt->next, options->RunAsDaemon);
+ if (add_single_log(opt, opt->next, options->RunAsDaemon)<0)
+ return -1;
opt = opt->next->next;
} else if (!opt->next) {
- add_single_log(opt, NULL, options->RunAsDaemon);
- return;
- } else {
+ if (add_single_log(opt, NULL, options->RunAsDaemon)<0)
+ return -1;
opt = opt->next;
+ } else {
+ ; /* give warning below */
}
}
@@ -802,11 +809,13 @@
tor_assert(!strcasecmp(opt->key, "LogFile"));
if (opt->next && !strcasecmp(opt->next->key, "LogLevel")) {
/* LogFile followed by LogLevel */
- add_single_log(opt->next, opt, options->RunAsDaemon);
+ if (add_single_log(opt->next, opt, options->RunAsDaemon)<0)
+ return -1;
opt = opt->next->next;
} else {
/* LogFile followed by LogFile or end of list. */
- add_single_log(NULL, opt, options->RunAsDaemon);
+ if (add_single_log(NULL, opt, options->RunAsDaemon)<0)
+ return -1;
opt = opt->next;
}
}
@@ -814,8 +823,10 @@
if (options->DebugLogFile) {
log_fn(LOG_WARN, "DebugLogFile is deprecated; use LogFile and LogLevel instead");
- add_file_log(LOG_DEBUG, LOG_ERR, options->DebugLogFile);
+ if (add_file_log(LOG_DEBUG, LOG_ERR, options->DebugLogFile)<0)
+ return -1;
}
+ return 0;
}
void
Index: main.c
===================================================================
RCS file: /home/or/cvsroot/src/or/main.c,v
retrieving revision 1.273
retrieving revision 1.274
diff -u -d -r1.273 -r1.274
--- main.c 20 May 2004 08:41:54 -0000 1.273
+++ main.c 20 May 2004 19:47:28 -0000 1.274
@@ -567,7 +567,9 @@
close_logs(); /* we'll close, then open with correct loglevel if necessary */
/* Configure the log(s) */
- config_init_logs(&options);
+ if (config_init_logs(&options)<0)
+ return -1;
+ close_temp_logs();
/* Set up our buckets */
connection_bucket_init();
@@ -853,7 +855,7 @@
int tor_main(int argc, char *argv[]) {
/* give it somewhere to log to initially */
- add_stream_log(LOG_NOTICE, LOG_ERR, "<stdout>", stdout);
+ add_temp_log();
log_fn(LOG_NOTICE,"Tor v%s. This is experimental software. Do not use it if you need anonymity.",VERSION);
if (network_init()<0) {
Index: or.h
===================================================================
RCS file: /home/or/cvsroot/src/or/or.h,v
retrieving revision 1.355
retrieving revision 1.356
diff -u -d -r1.355 -r1.356
--- or.h 20 May 2004 19:12:28 -0000 1.355
+++ or.h 20 May 2004 19:47:28 -0000 1.356
@@ -958,7 +958,7 @@
int config_assign_default_dirservers(void);
int getconfig(int argc, char **argv, or_options_t *options);
-void config_init_logs(or_options_t *options);
+int config_init_logs(or_options_t *options);
void config_parse_exit_policy(struct config_line_t *cfg,
struct exit_policy_t **dest);
void exit_policy_free(struct exit_policy_t *p);