github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/fs/log/syslog_unix.go (about)

     1  // Syslog interface for Unix variants only
     2  
     3  // +build !windows,!nacl,!plan9
     4  
     5  package log
     6  
     7  import (
     8  	"log"
     9  	"log/syslog"
    10  	"os"
    11  	"path"
    12  
    13  	"github.com/rclone/rclone/fs"
    14  )
    15  
    16  var (
    17  	syslogFacilityMap = map[string]syslog.Priority{
    18  		"KERN":     syslog.LOG_KERN,
    19  		"USER":     syslog.LOG_USER,
    20  		"MAIL":     syslog.LOG_MAIL,
    21  		"DAEMON":   syslog.LOG_DAEMON,
    22  		"AUTH":     syslog.LOG_AUTH,
    23  		"SYSLOG":   syslog.LOG_SYSLOG,
    24  		"LPR":      syslog.LOG_LPR,
    25  		"NEWS":     syslog.LOG_NEWS,
    26  		"UUCP":     syslog.LOG_UUCP,
    27  		"CRON":     syslog.LOG_CRON,
    28  		"AUTHPRIV": syslog.LOG_AUTHPRIV,
    29  		"FTP":      syslog.LOG_FTP,
    30  		"LOCAL0":   syslog.LOG_LOCAL0,
    31  		"LOCAL1":   syslog.LOG_LOCAL1,
    32  		"LOCAL2":   syslog.LOG_LOCAL2,
    33  		"LOCAL3":   syslog.LOG_LOCAL3,
    34  		"LOCAL4":   syslog.LOG_LOCAL4,
    35  		"LOCAL5":   syslog.LOG_LOCAL5,
    36  		"LOCAL6":   syslog.LOG_LOCAL6,
    37  		"LOCAL7":   syslog.LOG_LOCAL7,
    38  	}
    39  )
    40  
    41  // Starts syslog
    42  func startSysLog() bool {
    43  	facility, ok := syslogFacilityMap[Opt.SyslogFacility]
    44  	if !ok {
    45  		log.Fatalf("Unknown syslog facility %q - man syslog for list", Opt.SyslogFacility)
    46  	}
    47  	Me := path.Base(os.Args[0])
    48  	w, err := syslog.New(syslog.LOG_NOTICE|facility, Me)
    49  	if err != nil {
    50  		log.Fatalf("Failed to start syslog: %v", err)
    51  	}
    52  	log.SetFlags(0)
    53  	log.SetOutput(w)
    54  	fs.LogPrint = func(level fs.LogLevel, text string) {
    55  		switch level {
    56  		case fs.LogLevelEmergency:
    57  			_ = w.Emerg(text)
    58  		case fs.LogLevelAlert:
    59  			_ = w.Alert(text)
    60  		case fs.LogLevelCritical:
    61  			_ = w.Crit(text)
    62  		case fs.LogLevelError:
    63  			_ = w.Err(text)
    64  		case fs.LogLevelWarning:
    65  			_ = w.Warning(text)
    66  		case fs.LogLevelNotice:
    67  			_ = w.Notice(text)
    68  		case fs.LogLevelInfo:
    69  			_ = w.Info(text)
    70  		case fs.LogLevelDebug:
    71  			_ = w.Debug(text)
    72  		}
    73  	}
    74  	return true
    75  }