// +build !windows /* * Minio Cloud Storage, (C) 2015, 2016 Minio, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package main import ( "fmt" "log/syslog" "github.com/Sirupsen/logrus" "github.com/minio/minio/pkg/probe" ) type syslogLogger struct { Enable bool `json:"enable"` Addr string `json:"address"` Level string `json:"level"` } // syslogHook to send logs via syslog. type syslogHook struct { writer *syslog.Writer syslogNetwork string syslogRaddr string } // enableSyslogLogger - enable logger at raddr. func enableSyslogLogger(raddr string) { syslogHook, e := newSyslog("udp", raddr, syslog.LOG_ERR, "MINIO") fatalIf(probe.NewError(e), "Unable to instantiate syslog.", nil) log.Hooks.Add(syslogHook) // Add syslog hook. log.Formatter = &logrus.JSONFormatter{} // JSON formatted log. log.Level = logrus.InfoLevel // Minimum log level. } // newSyslog - Creates a hook to be added to an instance of logger. func newSyslog(network, raddr string, priority syslog.Priority, tag string) (*syslogHook, error) { w, e := syslog.Dial(network, raddr, priority, tag) return &syslogHook{w, network, raddr}, e } // Fire - fire the log event func (hook *syslogHook) Fire(entry *logrus.Entry) error { line, e := entry.String() if e != nil { return fmt.Errorf("Unable to read entry, %v", e) } switch entry.Level { case logrus.PanicLevel: return hook.writer.Crit(line) case logrus.FatalLevel: return hook.writer.Crit(line) case logrus.ErrorLevel: return hook.writer.Err(line) case logrus.WarnLevel: return hook.writer.Warning(line) case logrus.InfoLevel: return hook.writer.Info(line) case logrus.DebugLevel: return hook.writer.Debug(line) default: return nil } } // Levels - func (hook *syslogHook) Levels() []logrus.Level { return []logrus.Level{ logrus.PanicLevel, logrus.FatalLevel, logrus.ErrorLevel, logrus.WarnLevel, logrus.InfoLevel, logrus.DebugLevel, } }