go.dedis.ch/onet/v4@v4.0.0-pre1/log/ui.go (about)

     1  package log
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strconv"
     7  )
     8  
     9  func lvlUI(l int, args ...interface{}) {
    10  	if DebugVisible() > 0 {
    11  		lvl(l, 3, args...)
    12  	} else {
    13  		print(l, args...)
    14  	}
    15  }
    16  
    17  // Info prints the arguments given with a 'info'-format
    18  func Info(args ...interface{}) {
    19  	lvlUI(lvlInfo, args...)
    20  }
    21  
    22  // Print directly sends the arguments to the stdout
    23  func Print(args ...interface{}) {
    24  	lvlUI(lvlPrint, args...)
    25  }
    26  
    27  // Warn prints out the warning message and quits
    28  func Warn(args ...interface{}) {
    29  	lvlUI(lvlWarning, args...)
    30  }
    31  
    32  // Error prints out the error message and quits. If the
    33  // argument is an error, it will print the stack trace.
    34  func Error(args ...interface{}) {
    35  	last := len(args) - 1
    36  	if last >= 0 {
    37  		err, ok := args[last].(error)
    38  		if ok {
    39  			args[last] = fmt.Sprintf("%+v", err)
    40  		}
    41  	}
    42  
    43  	lvlUI(lvlError, args...)
    44  }
    45  
    46  // Panic prints out the panic message and panics
    47  func Panic(args ...interface{}) {
    48  	lvlUI(lvlPanic, args...)
    49  	panic(fmt.Sprint(args...))
    50  }
    51  
    52  // Fatal prints out the fatal message and quits
    53  func Fatal(args ...interface{}) {
    54  	lvlUI(lvlFatal, args...)
    55  	os.Exit(1)
    56  }
    57  
    58  // Infof takes a format-string and calls Info
    59  func Infof(f string, args ...interface{}) {
    60  	lvlUI(lvlInfo, fmt.Sprintf(f, args...))
    61  }
    62  
    63  // Printf is like Print but takes a formatting-argument first
    64  func Printf(f string, args ...interface{}) {
    65  	lvlUI(lvlPrint, fmt.Sprintf(f, args...))
    66  }
    67  
    68  // Warnf is like Warn but with a format-string
    69  func Warnf(f string, args ...interface{}) {
    70  	lvlUI(lvlWarning, fmt.Sprintf(f, args...))
    71  }
    72  
    73  // Errorf is like Error but with a format-string
    74  func Errorf(f string, args ...interface{}) {
    75  	lvlUI(lvlError, fmt.Sprintf(f, args...))
    76  }
    77  
    78  // Panicf is like Panic but with a format-string
    79  func Panicf(f string, args ...interface{}) {
    80  	lvlUI(lvlWarning, fmt.Sprintf(f, args...))
    81  	panic(args)
    82  }
    83  
    84  // Fatalf is like Fatal but with a format-string
    85  func Fatalf(f string, args ...interface{}) {
    86  	lvlUI(lvlFatal, fmt.Sprintf(f, args...))
    87  	os.Exit(-1)
    88  }
    89  
    90  // ErrFatal calls log.Fatal in the case err != nil
    91  func ErrFatal(err error, args ...interface{}) {
    92  	if err != nil {
    93  		lvlUI(lvlFatal, fmt.Sprint(args...)+" "+err.Error())
    94  		os.Exit(1)
    95  	}
    96  }
    97  
    98  // ErrFatalf will call Fatalf when the error is non-nil
    99  func ErrFatalf(err error, f string, args ...interface{}) {
   100  	if err != nil {
   101  		lvlUI(lvlFatal, fmt.Sprintf(f+" ", args...)+err.Error())
   102  		os.Exit(1)
   103  	}
   104  }
   105  
   106  func print(lvl int, args ...interface{}) {
   107  	debugMut.Lock()
   108  	defer debugMut.Unlock()
   109  	out := stdOut
   110  	if lvl < lvlInfo {
   111  		out = stdErr
   112  	}
   113  	switch loggers[0].GetLoggerInfo().DebugLvl {
   114  	case FormatPython:
   115  		prefix := []string{"[-]", "[!]", "[X]", "[Q]", "[+]", ""}
   116  		ind := lvl - lvlWarning
   117  		if ind < 0 || ind > 4 {
   118  			panic("index out of range " + strconv.Itoa(ind))
   119  		}
   120  		fmt.Fprint(out, prefix[ind], " ")
   121  	case FormatNone:
   122  	}
   123  	for i, a := range args {
   124  		fmt.Fprint(out, a)
   125  		if i != len(args)-1 {
   126  			fmt.Fprint(out, " ")
   127  		}
   128  	}
   129  	fmt.Fprint(out, "\n")
   130  }