Replace all Printf logging with structured zerolog in runtime files

Migrates CHORUS logging to 100% structured JSON format with ISO 8601 timestamps
for all runtime-critical subsystems.

Files modified:
- internal/runtime/shared.go: SimpleTaskTracker task completion logging
- api/http_server.go: HTTP server, council opportunity, and status logging
- pubsub/pubsub.go: PubSub initialization, topic management, and message handlers
- discovery/mdns.go: mDNS peer discovery and connection logging

All Printf calls replaced with structured zerolog logging using:
- .Info() for informational messages
- .Warn() for warnings and errors
- .Debug() for verbose debug output
- Structured fields: peer_id, topic_name, council_id, etc.

Version bumped to 0.5.40

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-10-19 17:04:27 +11:00
parent 2fd9a96950
commit 007aeb149a
5 changed files with 433 additions and 115 deletions

View File

@@ -8,10 +8,12 @@ import (
"sync"
"time"
"chorus/internal/logging"
"chorus/pkg/shhh"
pubsub "github.com/libp2p/go-libp2p-pubsub"
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/peer"
"github.com/rs/zerolog"
)
// PubSub handles publish/subscribe messaging for Bzzz coordination and HMMM meta-discussion
@@ -56,6 +58,9 @@ type PubSub struct {
// SHHH sentinel
redactor *shhh.Sentinel
redactorMux sync.RWMutex
// Structured logger
logger zerolog.Logger
}
// HypercoreLogger interface for dependency injection
@@ -168,6 +173,7 @@ func NewPubSubWithLogger(ctx context.Context, h host.Host, chorusTopic, hmmmTopi
dynamicSubs: make(map[string]*pubsub.Subscription),
dynamicHandlers: make(map[string]func([]byte, peer.ID)),
hypercoreLog: logger,
logger: logging.ForComponent(logging.ComponentP2P),
}
// Join static topics
@@ -181,7 +187,11 @@ func NewPubSubWithLogger(ctx context.Context, h host.Host, chorusTopic, hmmmTopi
go p.handleHmmmMessages()
go p.handleContextFeedbackMessages()
fmt.Printf("📡 PubSub initialized - Bzzz: %s, HMMM: %s, Context: %s\n", chorusTopic, hmmmTopic, contextTopic)
p.logger.Info().
Str("bzzz_topic", chorusTopic).
Str("hmmm_topic", hmmmTopic).
Str("context_topic", contextTopic).
Msg("PubSub initialized")
return p, nil
}
@@ -297,7 +307,7 @@ func (p *PubSub) subscribeDynamicTopic(topicName string, handler func([]byte, pe
go p.handleDynamicMessages(topicName, sub)
fmt.Printf("Joined dynamic topic: %s\n", topicName)
p.logger.Info().Str("topic_name", topicName).Msg("Joined dynamic topic")
return nil
}
@@ -339,12 +349,12 @@ func (p *PubSub) JoinRoleBasedTopics(role string, expertise []string, reportsTo
// Join all identified topics
for _, topicName := range topicsToJoin {
if err := p.JoinDynamicTopic(topicName); err != nil {
fmt.Printf("⚠️ Failed to join role-based topic %s: %v\n", topicName, err)
p.logger.Warn().Err(err).Str("topic_name", topicName).Msg("Failed to join role-based topic")
continue
}
}
fmt.Printf("🎯 Joined %d role-based topics for role: %s\n", len(topicsToJoin), role)
p.logger.Info().Int("topic_count", len(topicsToJoin)).Str("role", role).Msg("Joined role-based topics")
return nil
}
@@ -379,7 +389,7 @@ func (p *PubSub) LeaveDynamicTopic(topicName string) {
delete(p.dynamicHandlers, topicName)
p.dynamicHandlersMux.Unlock()
fmt.Printf("🗑️ Left dynamic topic: %s\n", topicName)
p.logger.Info().Str("topic_name", topicName).Msg("Left dynamic topic")
}
// PublishToDynamicTopic publishes a message to a specific dynamic topic
@@ -588,7 +598,7 @@ func (p *PubSub) handleBzzzMessages() {
if p.ctx.Err() != nil {
return // Context cancelled
}
fmt.Printf("Error receiving Bzzz message: %v\n", err)
p.logger.Warn().Err(err).Msg("Error receiving Bzzz message")
continue
}
@@ -598,7 +608,7 @@ func (p *PubSub) handleBzzzMessages() {
var chorusMsg Message
if err := json.Unmarshal(msg.Data, &chorusMsg); err != nil {
fmt.Printf("Failed to unmarshal Bzzz message: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to unmarshal Bzzz message")
continue
}
@@ -614,7 +624,7 @@ func (p *PubSub) handleHmmmMessages() {
if p.ctx.Err() != nil {
return // Context cancelled
}
fmt.Printf("Error receiving HMMM message: %v\n", err)
p.logger.Warn().Err(err).Msg("Error receiving HMMM message")
continue
}
@@ -624,7 +634,7 @@ func (p *PubSub) handleHmmmMessages() {
var hmmmMsg Message
if err := json.Unmarshal(msg.Data, &hmmmMsg); err != nil {
fmt.Printf("Failed to unmarshal HMMM message: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to unmarshal HMMM message")
continue
}
@@ -644,7 +654,7 @@ func (p *PubSub) handleContextFeedbackMessages() {
if p.ctx.Err() != nil {
return // Context cancelled
}
fmt.Printf("Error receiving Context Feedback message: %v\n", err)
p.logger.Warn().Err(err).Msg("Error receiving Context Feedback message")
continue
}
@@ -654,7 +664,7 @@ func (p *PubSub) handleContextFeedbackMessages() {
var contextMsg Message
if err := json.Unmarshal(msg.Data, &contextMsg); err != nil {
fmt.Printf("Failed to unmarshal Context Feedback message: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to unmarshal Context Feedback message")
continue
}
@@ -682,7 +692,7 @@ func (p *PubSub) handleDynamicMessages(topicName string, sub *pubsub.Subscriptio
if p.ctx.Err() != nil || err.Error() == "subscription cancelled" {
return // Subscription was cancelled, exit handler
}
fmt.Printf("Error receiving dynamic message on %s: %v\n", topicName, err)
p.logger.Warn().Err(err).Str("topic_name", topicName).Msg("Error receiving dynamic message")
continue
}
@@ -697,7 +707,7 @@ func (p *PubSub) handleDynamicMessages(topicName string, sub *pubsub.Subscriptio
var dynamicMsg Message
if err := json.Unmarshal(msg.Data, &dynamicMsg); err != nil {
fmt.Printf("Failed to unmarshal dynamic message on %s: %v\n", topicName, err)
p.logger.Warn().Err(err).Str("topic_name", topicName).Msg("Failed to unmarshal dynamic message")
continue
}
@@ -710,7 +720,11 @@ func (p *PubSub) handleDynamicMessages(topicName string, sub *pubsub.Subscriptio
// processBzzzMessage handles different types of Bzzz coordination messages
func (p *PubSub) processBzzzMessage(msg Message, from peer.ID) {
fmt.Printf("🐝 Bzzz [%s] from %s: %v\n", msg.Type, from.ShortString(), msg.Data)
p.logger.Debug().
Str("message_type", string(msg.Type)).
Str("from_peer", from.ShortString()).
Interface("data", msg.Data).
Msg("Bzzz message received")
// Log to hypercore if logger is available
if p.hypercoreLog != nil {
@@ -743,15 +757,18 @@ func (p *PubSub) processBzzzMessage(msg Message, from peer.ID) {
}
if err := p.hypercoreLog.AppendString(logType, logData); err != nil {
fmt.Printf("Failed to log Bzzz message to hypercore: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to log Bzzz message to hypercore")
}
}
}
// processHmmmMessage provides default handling for HMMM messages if no external handler is set
func (p *PubSub) processHmmmMessage(msg Message, from peer.ID) {
fmt.Printf("🎯 Default HMMM Handler [%s] from %s: %v\n",
msg.Type, from.ShortString(), msg.Data)
p.logger.Debug().
Str("message_type", string(msg.Type)).
Str("from_peer", from.ShortString()).
Interface("data", msg.Data).
Msg("Default HMMM Handler")
// Log to hypercore if logger is available
if p.hypercoreLog != nil {
@@ -794,15 +811,18 @@ func (p *PubSub) processHmmmMessage(msg Message, from peer.ID) {
}
if err := p.hypercoreLog.AppendString(logType, logData); err != nil {
fmt.Printf("Failed to log HMMM message to hypercore: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to log HMMM message to hypercore")
}
}
}
// processContextFeedbackMessage provides default handling for context feedback messages if no external handler is set
func (p *PubSub) processContextFeedbackMessage(msg Message, from peer.ID) {
fmt.Printf("🧠 Context Feedback [%s] from %s: %v\n",
msg.Type, from.ShortString(), msg.Data)
p.logger.Debug().
Str("message_type", string(msg.Type)).
Str("from_peer", from.ShortString()).
Interface("data", msg.Data).
Msg("Context Feedback")
// Log to hypercore if logger is available
if p.hypercoreLog != nil {
@@ -834,7 +854,7 @@ func (p *PubSub) processContextFeedbackMessage(msg Message, from peer.ID) {
}
if err := p.hypercoreLog.AppendString(logType, logData); err != nil {
fmt.Printf("Failed to log Context Feedback message to hypercore: %v\n", err)
p.logger.Warn().Err(err).Msg("Failed to log Context Feedback message to hypercore")
}
}
}