github.com/xhghs/rclone@v1.51.1-0.20200430155106-e186a28cced8/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  	}
    31  )
    32  
    33  // Starts syslog
    34  func startSysLog() bool {
    35  	facility, ok := syslogFacilityMap[Opt.SyslogFacility]
    36  	if !ok {
    37  		log.Fatalf("Unknown syslog facility %q - man syslog for list", Opt.SyslogFacility)
    38  	}
    39  	Me := path.Base(os.Args[0])
    40  	w, err := syslog.New(syslog.LOG_NOTICE|facility, Me)
    41  	if err != nil {
    42  		log.Fatalf("Failed to start syslog: %v", err)
    43  	}
    44  	log.SetFlags(0)
    45  	log.SetOutput(w)
    46  	fs.LogPrint = func(level fs.LogLevel, text string) {
    47  		switch level {
    48  		case fs.LogLevelEmergency:
    49  			_ = w.Emerg(text)
    50  		case fs.LogLevelAlert:
    51  			_ = w.Alert(text)
    52  		case fs.LogLevelCritical:
    53  			_ = w.Crit(text)
    54  		case fs.LogLevelError:
    55  			_ = w.Err(text)
    56  		case fs.LogLevelWarning:
    57  			_ = w.Warning(text)
    58  		case fs.LogLevelNotice:
    59  			_ = w.Notice(text)
    60  		case fs.LogLevelInfo:
    61  			_ = w.Info(text)
    62  		case fs.LogLevelDebug:
    63  			_ = w.Debug(text)
    64  		}
    65  	}
    66  	return true
    67  }