diff --git a/logger/const.go b/logger/const.go index de0397c..9250834 100644 --- a/logger/const.go +++ b/logger/const.go @@ -14,6 +14,7 @@ const ( ultronExFileName = "ultronex.{{env}}.log" partnerRequestsFileName = "partner_requests.{{env}}.log" requestsFileName = "requests.{{env}}.log" + promoCodeEventsFileName = "promocode_events.{{env}}.log" defaultReplacement = "[Filtered by Wego]" defaultMaskChar = "*" arrayKey = "[]" @@ -21,6 +22,7 @@ const ( logTypeUltronex logType = "ultronEx" logTypePartnerRequest logType = "partnerRequest" logTypeRequest logType = "request" + logTypePromoCodeEvent logType = "promoCodeEvent" contextKeyRequest contextKey = "request" contextKeyRequestType contextKey = "requestType" diff --git a/logger/logger.go b/logger/logger.go index ecc2179..9e59083 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -74,9 +74,24 @@ func LogRequest(log *Request) { } } +// LogPromoCodeEvent logs a promo-code event to a local file. +// The event is logged as a flat JSON object (key/value pairs). +func LogPromoCodeEvent(fields map[string]any) { + logger := loggers[logTypePromoCodeEvent] + if logger == nil || len(fields) == 0 { + return + } + + zapFields := make([]zap.Field, 0, len(fields)) + for key, value := range fields { + zapFields = append(zapFields, zap.Any(key, value)) + } + logger.Info("", zapFields...) +} + // Init initializes loggers func Init() error { - loggers = make(map[logType]*zap.Logger, 2) + loggers = make(map[logType]*zap.Logger, 4) uLog, err := initLogger(ultronExFileName) if err != nil { @@ -95,6 +110,12 @@ func Init() error { return errors.New("cannot init request logger", err) } loggers[logTypeRequest] = rLog + + pcLog, err := initLogger(promoCodeEventsFileName) + if err != nil { + return errors.New("cannot init promo code event logger", err) + } + loggers[logTypePromoCodeEvent] = pcLog return nil }