aider: Add file and line number information to ExtendedEvent in CustomHandler.
# Aider chat conversation:
USER: create an extended type called ExtendedEvent which conforms to Event.  in the custom handler, attach the file and line number information from the caller to the ExtendedEvent.  that way all of the extendedhandlers can access it without using the runtime module.  add getters to the ExtendedEvent interface and type.
ASSISTANT: To create an `ExtendedEvent` type that conforms to `Event` and includes file and line number information, we need to:
1. Define the `ExtendedEvent` type and interface in `event.go`.
2. Update the `CustomHandler` in `simplelog.go` to attach file and line number information to the `ExtendedEvent`.
3. Add getters to the `ExtendedEvent` interface and type.
Here are the *SEARCH/REPLACE* blocks:
event.go
```go
<<<<<<< SEARCH
}
=======
}
type ExtendedEvent interface {
	GetID() uuid.UUID
	GetTimestamp() time.Time
	GetLevel() string
	GetMessage() string
	GetData() json.RawMessage
	GetFile() string
	GetLine() int
}
type extendedEvent struct {
	Event
	File string `json:"file"`
	Line int    `json:"line"`
}
func (e extendedEvent) GetID() uuid.UUID {
	return e.ID
}
func (e extendedEvent) GetTimestamp() time.Time {
	return e.Timestamp
}
func (e extendedEvent) GetLevel() string {
	return e.Level
}
func (e extendedEvent) GetMessage() string {
	return e.Message
}
func (e extendedEvent) GetData() json.RawMessage {
	return e.Data
}
func (e extendedEvent) GetFile() string {
	return e.File
}
func (e extendedEvent) GetLine() int {
	return e.Line
}
func NewExtendedEvent(level, message string, data json.RawMessage, file string, line int) ExtendedEvent {
	return extendedEvent{
		Event: NewEvent(level, message, data),
		File:  file,
		Line:  line,
	}
}
>>>>>>> REPLACE
```
simplelog.go
```go
<<<<<<< SEARCH
	"log"
=======
	"log"
	"runtime"
>>>>>>> REPLACE
```
simplelog.go
```go
<<<<<<< SEARCH
	event := NewEvent(record.Level.String(), record.Message, jsonData)
	select {
	case r.ch <- event:
		return nil // Successfully sent event to channel
	default:
		return fmt.Errorf("failed to log event: channel is full")
	}
=======
	// Get the caller information
	_, file, line, ok := runtime.Caller(5)
	if !ok {
		file = "???"
		line = 0
	}
	event := NewExtendedEvent(record.Level.String(), record.Message, jsonData, file, line)
	for _, handler := range cl.handlers {
		if err := handler.Handle(ctx, event); err != nil {
			return err
		}
	}
	return nil
>>>>>>> REPLACE
```
			
			
This commit is contained in:
		
							parent
							
								
									2c3d9a94fa
								
							
						
					
					
						commit
						3638c0c4df
					
				
							
								
								
									
										52
									
								
								event.go
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								event.go
									
									
									
									
									
								
							| @ -15,6 +15,58 @@ type Event struct { | ||||
| 	Data      json.RawMessage `json:"data"` | ||||
| } | ||||
| 
 | ||||
| type ExtendedEvent interface { | ||||
| 	GetID() uuid.UUID | ||||
| 	GetTimestamp() time.Time | ||||
| 	GetLevel() string | ||||
| 	GetMessage() string | ||||
| 	GetData() json.RawMessage | ||||
| 	GetFile() string | ||||
| 	GetLine() int | ||||
| } | ||||
| 
 | ||||
| type extendedEvent struct { | ||||
| 	Event | ||||
| 	File string `json:"file"` | ||||
| 	Line int    `json:"line"` | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetID() uuid.UUID { | ||||
| 	return e.ID | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetTimestamp() time.Time { | ||||
| 	return e.Timestamp | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetLevel() string { | ||||
| 	return e.Level | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetMessage() string { | ||||
| 	return e.Message | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetData() json.RawMessage { | ||||
| 	return e.Data | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetFile() string { | ||||
| 	return e.File | ||||
| } | ||||
| 
 | ||||
| func (e extendedEvent) GetLine() int { | ||||
| 	return e.Line | ||||
| } | ||||
| 
 | ||||
| func NewExtendedEvent(level, message string, data json.RawMessage, file string, line int) ExtendedEvent { | ||||
| 	return extendedEvent{ | ||||
| 		Event: NewEvent(level, message, data), | ||||
| 		File:  file, | ||||
| 		Line:  line, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func NewEvent(level, message string, data json.RawMessage) Event { | ||||
| 	return Event{ | ||||
| 		ID:        uuid.New(), | ||||
|  | ||||
| @ -3,6 +3,7 @@ package simplelog | ||||
| import ( | ||||
| 	"context" | ||||
| 	"log" | ||||
| 	"runtime" | ||||
| 	"log/slog" | ||||
| 	"os" | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user