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 }