github.com/abolfazlbeh/zhycan@v0.0.0-20230819144214-24cf38237387/internal/logger/types.go (about)

     1  package logger
     2  
     3  // Imports needed list
     4  import (
     5  	"strings"
     6  	"time"
     7  )
     8  
     9  // Some Constants
    10  const (
    11  	MAX = 6
    12  )
    13  
    14  // LogObject - all methods that want to log must transfer object of this.
    15  type LogObject struct {
    16  	Level      LogLevel
    17  	Module     string
    18  	LogType    string
    19  	Time       int64
    20  	Additional interface{}
    21  	Message    interface{}
    22  }
    23  
    24  // NewLogObject - enhance method to create and return reference of LogObject
    25  func NewLogObject(level LogLevel, module string, logType LogType, eventTime time.Time, message interface{}, additional interface{}) *LogObject {
    26  	return &LogObject{
    27  		Level:      level,
    28  		Module:     module,
    29  		LogType:    logType.String(),
    30  		Time:       eventTime.UTC().UnixNano(),
    31  		Message:    message,
    32  		Additional: additional,
    33  	}
    34  }
    35  
    36  // LogLevel Object
    37  type LogLevel int
    38  
    39  // Some Constants - used with LogLevel
    40  const (
    41  	DEBUG LogLevel = MAX - iota
    42  	INFO
    43  	WARNING
    44  	ERROR
    45  )
    46  
    47  func (l LogLevel) String() string {
    48  	switch l {
    49  	case DEBUG:
    50  		return "DEBUG"
    51  	case INFO:
    52  		return "INFO"
    53  	case WARNING:
    54  		return "WARNING"
    55  	case ERROR:
    56  		return "ERROR"
    57  	}
    58  	return "DEFAULT"
    59  }
    60  
    61  // IsLogLevel - check whether is a true log level
    62  func (l LogLevel) IsLogLevel() bool {
    63  	if l <= DEBUG && l >= ERROR {
    64  		return true
    65  	}
    66  
    67  	return false
    68  }
    69  
    70  func StringToLogLevel(level string) LogLevel {
    71  	switch strings.ToUpper(level) {
    72  	case "DEBUG":
    73  		return DEBUG
    74  	case "INFO":
    75  		return INFO
    76  	case "WARNING":
    77  		return WARNING
    78  	case "ERROR":
    79  		return ERROR
    80  	}
    81  	return DEBUG
    82  }
    83  
    84  // LogType Object
    85  type LogType struct {
    86  	name string
    87  }
    88  
    89  // NewLogType - Create A New Log Type
    90  func NewLogType(name string) LogType {
    91  	return LogType{name: name}
    92  }
    93  
    94  var (
    95  	FuncMaintenanceType = LogType{name: "FUNC_MAINT"}
    96  	DebugType           = LogType{name: "DEBUG_INFORMATION"}
    97  )
    98  
    99  func (l LogType) String() string {
   100  	return l.name
   101  }