github.com/merlinepedra/gopphish-attack@v0.9.0/logger/logger.go (about) 1 package logger 2 3 import ( 4 "errors" 5 "io" 6 "os" 7 8 "github.com/sirupsen/logrus" 9 ) 10 11 // Logger is the main logger that is abstracted in this package. 12 // It is exported here for use with gorm. 13 var Logger *logrus.Logger 14 15 // ErrInvalidLevel is returned when an invalid log level is given in the config 16 var ErrInvalidLevel = errors.New("invalid log level") 17 18 // Config represents configuration details for logging. 19 type Config struct { 20 Filename string `json:"filename"` 21 Level string `json:"level"` 22 } 23 24 func init() { 25 Logger = logrus.New() 26 Logger.Formatter = &logrus.TextFormatter{DisableColors: true} 27 } 28 29 // Setup configures the logger based on options in the config.json. 30 func Setup(config *Config) error { 31 var err error 32 // Set up logging level 33 level := logrus.InfoLevel 34 if config.Level != "" { 35 level, err = logrus.ParseLevel(config.Level) 36 if err != nil { 37 return err 38 } 39 } 40 Logger.SetLevel(level) 41 // Set up logging to a file if specified in the config 42 logFile := config.Filename 43 if logFile != "" { 44 f, err := os.OpenFile(logFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) 45 if err != nil { 46 return err 47 } 48 mw := io.MultiWriter(os.Stderr, f) 49 Logger.Out = mw 50 } 51 return nil 52 } 53 54 // Debug logs a debug message 55 func Debug(args ...interface{}) { 56 Logger.Debug(args...) 57 } 58 59 // Debugf logs a formatted debug messsage 60 func Debugf(format string, args ...interface{}) { 61 Logger.Debugf(format, args...) 62 } 63 64 // Info logs an informational message 65 func Info(args ...interface{}) { 66 Logger.Info(args...) 67 } 68 69 // Infof logs a formatted informational message 70 func Infof(format string, args ...interface{}) { 71 Logger.Infof(format, args...) 72 } 73 74 // Error logs an error message 75 func Error(args ...interface{}) { 76 Logger.Error(args...) 77 } 78 79 // Errorf logs a formatted error message 80 func Errorf(format string, args ...interface{}) { 81 Logger.Errorf(format, args...) 82 } 83 84 // Warn logs a warning message 85 func Warn(args ...interface{}) { 86 Logger.Warn(args...) 87 } 88 89 // Warnf logs a formatted warning message 90 func Warnf(format string, args ...interface{}) { 91 Logger.Warnf(format, args...) 92 } 93 94 // Fatal logs a fatal error message 95 func Fatal(args ...interface{}) { 96 Logger.Fatal(args...) 97 } 98 99 // Fatalf logs a formatted fatal error message 100 func Fatalf(format string, args ...interface{}) { 101 Logger.Fatalf(format, args...) 102 } 103 104 // WithFields returns a new log enty with the provided fields 105 func WithFields(fields logrus.Fields) *logrus.Entry { 106 return Logger.WithFields(fields) 107 } 108 109 // Writer returns the current logging writer 110 func Writer() *io.PipeWriter { 111 return Logger.Writer() 112 }