|
|
|
@ -1116,6 +1116,36 @@ static char *set_schedtime(const char *arg, struct schedtime *st)
@@ -1116,6 +1116,36 @@ 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 = ""; |
|
|
|
@ -1415,6 +1445,9 @@ struct opt_table opt_config_table[] = {
@@ -1415,6 +1445,9 @@ 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, |
|
|
|
|
"Log stderr to file"), |
|
|
|
|
OPT_WITHOUT_ARG("--log-show-date|-L", |
|
|
|
|
opt_set_bool, &opt_log_show_date, |
|
|
|
|
"Show date on every log line"), |
|
|
|
|