Browse Source

Add --log-file option which redirects stderr to a file, but valid anywhere in the commandline or config file

Luke Dashjr 12 years ago
parent
commit
b0240dd004
3 changed files with 39 additions and 0 deletions
  1. 1 0
      README
  2. 1 0
      compat.h
  3. 37 0
      miner.c

+ 1 - 0
README

@@ -182,6 +182,7 @@ Options for both config file and command line:
 --kernel-path|-K <arg> Specify a path to where bitstream and kernel files are (default: "/usr/local/bin")
 --load-balance      Change multipool strategy from failover to efficiency based balance
 --log|-l <arg>      Interval in seconds between log output (default: 5)
+--log-file|-L <arg> Append log file for output messages
 --log-microseconds  Include microseconds in log output
 --monitor|-m <arg>  Use custom pipe cmd for output messages
 --net-delay         Impose small delays in networking to not overload slow routers

+ 1 - 0
compat.h

@@ -24,6 +24,7 @@
 
 #ifdef WIN32
 #include <errno.h>
+#include <fcntl.h>
 #include <time.h>
 #include <pthread.h>
 #include <sys/time.h>

+ 37 - 0
miner.c

@@ -1006,6 +1006,37 @@ static char *set_schedtime(const char *arg, struct schedtime *st)
 	return NULL;
 }
 
+static
+char *set_log_file(char *arg)
+{
+	char *r = "";
+	long int i = strtol(arg, &r, 10);
+	int fd, stderr_fd = fileno(stderr);
+
+	if ((!*r) && i >= 0 && i <= INT_MAX)
+		fd = i;
+	else
+	if (!strcmp(arg, "-"))
+	{
+		fd = fileno(stdout);
+		if (unlikely(fd == -1))
+			return "Standard output missing for log-file";
+	}
+	else
+	{
+		fd = open(arg, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR);
+		if (unlikely(fd == -1))
+			return "Failed to open %s for log-file";
+	}
+	
+	close(stderr_fd);
+	if (unlikely(-1 == dup2(fd, stderr_fd)))
+		return "Failed to dup2 for log-file";
+	close(fd);
+	
+	return NULL;
+}
+
 static char* set_sharelog(char *arg)
 {
 	char *r = "";
@@ -1392,6 +1423,12 @@ static struct opt_table opt_config_table[] = {
 	OPT_WITH_ARG("--log|-l",
 		     set_int_0_to_9999, opt_show_intval, &opt_log_interval,
 		     "Interval in seconds between log output"),
+	OPT_WITH_ARG("--log-file|-L",
+	             set_log_file, NULL, NULL,
+	             "Append log file for output messages"),
+	OPT_WITH_ARG("--logfile",
+	             set_log_file, NULL, NULL,
+	             opt_hidden),
 	OPT_WITHOUT_ARG("--log-microseconds",
 	                opt_set_bool, &opt_log_microseconds,
 	                "Include microseconds in log output"),