Skip to content

Commit 3ced5c0

Browse files
feat(yalogger): Implement MergeFields for logger
1 parent 82f24a6 commit 3ced5c0

2 files changed

Lines changed: 36 additions & 6 deletions

File tree

yalogger/logrus_logger.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,10 @@ func (l *logrusAdapter) GetFields() map[string]any {
392392
//
393393
// Example usage:
394394
//
395-
// val := logger.GetField("user_id")
396-
// if val != nil {
397-
// // Handle missing field
398-
// }
395+
// val := logger.GetField("user_id")
396+
// if val != nil {
397+
// // Handle missing field
398+
// }
399399
func (l *logrusAdapter) GetField(key string) any {
400400
val, ok := l.entry.Data[key]
401401
if !ok {
@@ -405,6 +405,25 @@ func (l *logrusAdapter) GetField(key string) any {
405405
return val
406406
}
407407

408+
// MegreFields merges fields from another Logger instance into the current log context.
409+
//
410+
// If there are overlapping keys, the values from the other Logger will overwrite the current context.
411+
//
412+
// Parameters:
413+
//
414+
// - other: the Logger instance whose fields will be merged into the current context.
415+
//
416+
// Example usage:
417+
//
418+
// logger1 := logger.WithField("user_id", 42)
419+
// logger2 := logger.WithField("session_id", "abc123")
420+
// mergedLogger := logger1.MergeFields(logger2)
421+
func (l *logrusAdapter) MergeFields(other Logger) Logger {
422+
return &logrusAdapter{
423+
entry: l.entry.WithFields(other.GetFields()),
424+
}
425+
}
426+
408427
// DeleteField removes a field from the current log context.
409428
//
410429
// Parameters:

yalogger/yalogger.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,20 @@ type Logger interface {
199199
//
200200
// Example usage:
201201
//
202-
// fields := logger.Fields()
202+
// fields := logger.Fields()
203203
GetFields() map[string]any
204204

205+
// MergeFields merges fields from another Logger into the current log context.
206+
//
207+
// If a field already exists, it will be overwritten by the value from the other Logger.
208+
//
209+
// Example usage:
210+
//
211+
// logger1 := logger.WithField("user_id", 42)
212+
// logger2 := logger.WithField("session_id", "abc123")
213+
// mergedLogger := logger1.MergeFields(logger2)
214+
MergeFields(other Logger) Logger
215+
205216
// DeleteField removes a field from the current log context.
206217
//
207218
// Example usage:
@@ -215,7 +226,7 @@ type Logger interface {
215226
//
216227
// userID, ok := logger.GetField("user_id").(uint64)
217228
// if !ok {
218-
// // Handle type assertion error
229+
// // Handle type assertion error
219230
// }
220231
GetField(key string) any
221232
}

0 commit comments

Comments
 (0)