@@ -43,6 +43,7 @@ static enum arg_what {
4343 WHAT_DIRECTORY ,
4444 _WHAT_INVALID = -1 ,
4545} arg_what = _WHAT_INVALID ;
46+ static int arg_log_level = -1 ;
4647static bool arg_verbose = false;
4748static bool arg_dry_run = false;
4849static bool arg_exclude_nodump = true;
@@ -88,6 +89,7 @@ static void help(void) {
8889 "Content-Addressable Data Synchronization Tool\n\n"
8990 " -h --help Show this help\n"
9091 " --version Show brief version information\n"
92+ " -l --log-level=LEVEL Set log level (debug, info, err)\n"
9193 " -v --verbose Show terse status information during runtime\n"
9294 " -n --dry-run When garbage collecting, only print what would\n"
9395 " be done\n"
@@ -349,6 +351,7 @@ static int parse_argv(int argc, char *argv[]) {
349351 static const struct option options [] = {
350352 { "help" , no_argument , NULL , 'h' },
351353 { "version" , no_argument , NULL , ARG_VERSION },
354+ { "log-level" , required_argument , NULL , 'l' },
352355 { "verbose" , no_argument , NULL , 'v' },
353356 { "dry-run" , no_argument , NULL , 'n' },
354357 { "store" , required_argument , NULL , ARG_STORE },
@@ -387,7 +390,7 @@ static int parse_argv(int argc, char *argv[]) {
387390 if (getenv_bool ("CASYNC_VERBOSE" ) > 0 )
388391 arg_verbose = true;
389392
390- while ((c = getopt_long (argc , argv , "hvnc " , options , NULL )) >= 0 ) {
393+ while ((c = getopt_long (argc , argv , "hl:vnc " , options , NULL )) >= 0 ) {
391394
392395 switch (c ) {
393396
@@ -399,6 +402,15 @@ static int parse_argv(int argc, char *argv[]) {
399402 version ();
400403 return 0 ;
401404
405+ case 'l' :
406+ r = set_log_level_from_string (optarg );
407+ if (r < 0 )
408+ return log_error_errno (r , "Failed to parse log level \"%s\": %m" , optarg );
409+
410+ arg_log_level = r ;
411+
412+ break ;
413+
402414 case 'v' :
403415 arg_verbose = true;
404416 break ;
@@ -679,7 +691,13 @@ static int parse_argv(int argc, char *argv[]) {
679691 }
680692 }
681693
682- /* Propagate our verbose setting to helpers we fork off */
694+ /* Propagate some settings to helpers we fork off */
695+ if (arg_log_level >= 0 ) {
696+ char buffer [DECIMAL_STR_MAX (int )];
697+ snprintf (buffer , sizeof (buffer ), "%d" , arg_log_level );
698+ (void ) setenv ("CASYNC_LOG_LEVEL" , buffer , 1 );
699+ }
700+
683701 if (arg_verbose )
684702 (void ) putenv ((char * ) "CASYNC_VERBOSE=1" );
685703 else
0 commit comments