@@ -179,46 +179,49 @@ func (l *Logger) LogEvent(event AuditEvent) {
179179 "action" : event .Action ,
180180 "result" : event .Result ,
181181 }
182+
183+ // Override the timestamp with our event timestamp
184+ entry := l .logger .WithFields (fields ).WithTime (event .Timestamp )
182185
183- // Add optional fields
186+ // Add optional fields to the entry
184187 if event .UserID != "" {
185- fields [ "user_id" ] = event .UserID
188+ entry = entry . WithField ( "user_id" , event .UserID )
186189 }
187190 if event .Target != "" {
188- fields [ "target" ] = event .Target
191+ entry = entry . WithField ( "target" , event .Target )
189192 }
190193 if event .RemoteAddr != "" {
191- fields [ "remote_addr" ] = event .RemoteAddr
194+ entry = entry . WithField ( "remote_addr" , event .RemoteAddr )
192195 }
193196 if event .UserAgent != "" {
194- fields [ "user_agent" ] = event .UserAgent
197+ entry = entry . WithField ( "user_agent" , event .UserAgent )
195198 }
196199 if event .SessionID != "" {
197- fields [ "session_id" ] = event .SessionID
200+ entry = entry . WithField ( "session_id" , event .SessionID )
198201 }
199202 if event .RequestID != "" {
200- fields [ "request_id" ] = event .RequestID
203+ entry = entry . WithField ( "request_id" , event .RequestID )
201204 }
202205
203206 // Add details if present
204207 if event .Details != nil {
205208 for key , value := range event .Details {
206- fields [ "detail_" + key ] = value
209+ entry = entry . WithField ( "detail_" + key , value )
207210 }
208211 }
209212
210213 // Log based on severity
211214 switch event .Severity {
212215 case SeverityCritical :
213- l . logger . WithFields ( fields ) .Error (event .Message )
216+ entry .Error (event .Message )
214217 case SeverityHigh :
215- l . logger . WithFields ( fields ) .Warn (event .Message )
218+ entry .Warn (event .Message )
216219 case SeverityMedium :
217- l . logger . WithFields ( fields ) .Info (event .Message )
220+ entry .Info (event .Message )
218221 case SeverityLow :
219- l . logger . WithFields ( fields ) .Debug (event .Message )
222+ entry .Debug (event .Message )
220223 default :
221- l . logger . WithFields ( fields ) .Info (event .Message )
224+ entry .Info (event .Message )
222225 }
223226}
224227
@@ -256,11 +259,41 @@ func (l *Logger) sanitizeString(s string) string {
256259 }
257260
258261 result := s
262+ lower := strings .ToLower (result )
263+
259264 for _ , pattern := range sensitivePatterns {
260- if strings .Contains (strings .ToLower (result ), pattern ) {
261- // Mask the value after the pattern
262- result = strings .ReplaceAll (result , pattern + "=*" , pattern + "=[REDACTED]" )
263- result = strings .ReplaceAll (result , pattern + ": *" , pattern + ": [REDACTED]" )
265+ if strings .Contains (lower , pattern ) {
266+ // Look for patterns like "password=value", "token: value", etc.
267+ // Replace everything after the = or : with [REDACTED]
268+ if idx := strings .Index (lower , pattern + "=" ); idx != - 1 {
269+ start := idx + len (pattern ) + 1
270+ end := len (result )
271+ // Find end of value (space or end of string)
272+ for i := start ; i < len (result ); i ++ {
273+ if result [i ] == ' ' || result [i ] == '\n' || result [i ] == '\t' {
274+ end = i
275+ break
276+ }
277+ }
278+ result = result [:start ] + "[REDACTED]" + result [end :]
279+ lower = strings .ToLower (result ) // Update lower case version
280+ } else if idx := strings .Index (lower , pattern + ":" ); idx != - 1 {
281+ start := idx + len (pattern ) + 1
282+ // Skip any spaces after the colon
283+ for start < len (result ) && result [start ] == ' ' {
284+ start ++
285+ }
286+ end := len (result )
287+ // Find end of value (space or end of string)
288+ for i := start ; i < len (result ); i ++ {
289+ if result [i ] == ' ' || result [i ] == '\n' || result [i ] == '\t' {
290+ end = i
291+ break
292+ }
293+ }
294+ result = result [:start ] + "[REDACTED]" + result [end :]
295+ lower = strings .ToLower (result ) // Update lower case version
296+ }
264297 }
265298 }
266299
@@ -430,7 +463,9 @@ func (l *Logger) CleanupOldLogs() error {
430463// Close closes the audit logger and any open files
431464func (l * Logger ) Close () error {
432465 if l .logFile != nil {
433- return l .logFile .Close ()
466+ err := l .logFile .Close ()
467+ l .logFile = nil
468+ return err
434469 }
435470 return nil
436471}
0 commit comments