github.com/divyam234/rclone@v1.64.1/fs/log/syslog_unix.go (about)

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