github.com/korniux/gophish@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  }