refactor(route/logging): streamline log messages with EmbedObject for improved clarity

Updated logging statements across multiple files to utilize EmbedObject for enhanced context in log messages. This change improves the readability and consistency of log outputs, particularly in health monitoring and route validation processes.
This commit is contained in:
yusing
2026-02-08 09:20:01 +08:00
parent 31b4fedf72
commit 5c8126c2e6
8 changed files with 59 additions and 29 deletions

View File

@@ -120,8 +120,7 @@ func (s *FileServer) Start(parent task.Parent) gperr.Error {
if s.UseHealthCheck() {
s.HealthMon = monitor.NewMonitor(s)
if err := s.HealthMon.Start(s.task); err != nil {
l := log.With().Str("type", "fileserver").Str("name", s.Name()).Logger()
gperr.LogWarn("health monitor error", err, &l)
log.Warn().EmbedObject(s).Err(err).Msg("health monitor error")
s.HealthMon = nil
}
}

View File

@@ -14,6 +14,7 @@ import (
"sync"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/yusing/godoxy/internal/agentpool"
config "github.com/yusing/godoxy/internal/config/types"
@@ -218,9 +219,7 @@ func (r *Route) validate() gperr.Error {
r.Proxmox.Node = nodeName
r.Proxmox.VMID = &zero
r.Proxmox.VMName = ""
log.Info().
Str("node", nodeName).
Msgf("found proxmox node for route %q", r.Alias)
log.Info().EmbedObject(r).Msg("found proxmox node")
break
}
@@ -234,17 +233,13 @@ func (r *Route) validate() gperr.Error {
r.Proxmox.Node = resource.Node
r.Proxmox.VMID = &vmid
r.Proxmox.VMName = resource.Name
log.Info().
Str("node", resource.Node).
Int("vmid", int(resource.VMID)).
Str("vmname", resource.Name).
Msgf("found proxmox resource for route %q", r.Alias)
log.Info().EmbedObject(r).Msg("found proxmox resource")
break
}
}
}
if wasNotNil && (r.Proxmox.Node == "" || r.Proxmox.VMID == nil) {
log.Warn().Msgf("no proxmox node / resource found for route %q", r.Alias)
log.Warn().EmbedObject(r).Msg("no proxmox node / resource found")
}
}
@@ -395,7 +390,7 @@ func (r *Route) validateRules() error {
}
func (r *Route) validateProxmox() {
l := log.With().Str("route", r.Alias).Logger()
l := log.With().EmbedObject(r).Logger()
nodeName := r.Proxmox.Node
vmid := r.Proxmox.VMID
@@ -424,7 +419,7 @@ func (r *Route) validateProxmox() {
} else {
res, err := node.Client().GetResource("lxc", *vmid)
if err != nil { // ErrResourceNotFound
l.Err(err).Msgf("failed to get resource %d", *vmid)
l.Error().Err(err).Msgf("failed to get resource %d", *vmid)
return
}
@@ -443,24 +438,22 @@ func (r *Route) validateProxmox() {
return
}
l = l.With().Str("container", containerName).Logger()
l.Info().Msgf("checking if container is running")
l.Info().Str("container", containerName).Msg("checking if container is running")
running, err := node.LXCIsRunning(ctx, *vmid)
if err != nil {
l.Err(err).Msgf("failed to check container state")
l.Error().Err(err).Msgf("failed to check container state")
return
}
if !running {
l.Info().Msgf("starting container")
l.Info().Msg("starting container")
if err := node.LXCAction(ctx, *vmid, proxmox.LXCStart); err != nil {
l.Err(err).Msgf("failed to start container")
l.Error().Err(err).Msg("failed to start container")
return
}
}
l.Info().Msgf("finding reachable ip addresses")
l.Info().Msg("finding reachable ip addresses")
errs := gperr.NewBuilder("failed to find reachable ip addresses")
for _, ip := range ips {
if err := netutils.PingTCP(ctx, ip, r.Port.Proxy); err != nil {
@@ -687,6 +680,44 @@ func (r *Route) DisplayName() string {
return r.Homepage.Name
}
func (r *Route) MarshalZerologObject(e *zerolog.Event) {
e.Str("alias", r.Alias)
switch r := r.impl.(type) {
case *ReveseProxyRoute:
e.Str("type", "reverse_proxy").
Str("scheme", r.Scheme.String()).
Str("bind", r.LisURL.Host).
Str("target", r.ProxyURL.URL.String())
case *FileServer:
e.Str("type", "file_server").
Str("root", r.Root)
case *StreamRoute:
e.Str("type", "stream").
Str("scheme", r.LisURL.Scheme+"->"+r.ProxyURL.Scheme)
if r.stream != nil {
// listening port could be zero (random),
// use LocalAddr() to get the actual listening host+port.
e.Str("bind", r.stream.LocalAddr().String())
} else {
// not yet started
e.Str("bind", r.LisURL.Host)
}
e.Str("target", r.ProxyURL.URL.String())
}
if r.Proxmox != nil {
e.Str("proxmox", r.Proxmox.Node)
if r.Proxmox.VMID != nil {
e.Int("vmid", *r.Proxmox.VMID)
}
if r.Proxmox.VMName != "" {
e.Str("vmname", r.Proxmox.VMName)
}
}
if r.Container != nil {
e.Str("container", r.Container.ContainerName)
}
}
// PreferOver implements pool.Preferable to resolve duplicate route keys deterministically.
// Preference policy:
// - Prefer routes with rules over routes without rules.

View File

@@ -6,7 +6,6 @@ import (
"net"
"strings"
"github.com/rs/zerolog"
entrypoint "github.com/yusing/godoxy/internal/entrypoint/types"
"github.com/yusing/godoxy/internal/health/monitor"
"github.com/yusing/godoxy/internal/idlewatcher"
@@ -21,8 +20,6 @@ import (
type StreamRoute struct {
*Route
stream nettypes.Stream
l zerolog.Logger
}
var _ types.StreamRoute = (*StreamRoute)(nil)
@@ -65,7 +62,7 @@ func (r *StreamRoute) Start(parent task.Parent) gperr.Error {
if r.HealthMon != nil {
if err := r.HealthMon.Start(r.task); err != nil {
gperr.LogWarn("health monitor error", err, &r.l)
gperr.LogWarn("health monitor error", err)
r.HealthMon = nil
}
}

View File

@@ -8,5 +8,5 @@ import (
)
func logDebugf(stream zerolog.LogObjectMarshaler, format string, v ...any) {
log.Debug().Object("stream", stream).Msgf(format, v...)
log.Debug().EmbedObject(stream).Msgf(format, v...)
}

View File

@@ -29,7 +29,7 @@ func logErr(stream zerolog.LogObjectMarshaler, err error, msg string) {
if err == nil {
return
}
log.Err(err).Object("stream", stream).Msg(msg)
log.Err(err).EmbedObject(stream).Msg(msg)
}
func logErrf(stream zerolog.LogObjectMarshaler, err error, format string, v ...any) {
@@ -37,5 +37,5 @@ func logErrf(stream zerolog.LogObjectMarshaler, err error, format string, v ...a
if err == nil {
return
}
log.Err(err).Object("stream", stream).Msgf(format, v...)
log.Err(err).EmbedObject(stream).Msgf(format, v...)
}

View File

@@ -57,7 +57,7 @@ func (s *TCPTCPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
}
if acl := acl.FromCtx(ctx); acl != nil {
log.Debug().Str("listener", s.listener.Addr().String()).Msg("wrapping listener with ACL")
log.Debug().EmbedObject(s).Msg("wrapping listener with ACL")
s.listener = acl.WrapTCP(s.listener)
}

View File

@@ -82,7 +82,7 @@ func (s *UDPUDPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
}
s.listener = l
if acl := acl.FromCtx(ctx); acl != nil {
log.Debug().Str("listener", s.listener.LocalAddr().String()).Msg("wrapping listener with ACL")
log.Debug().EmbedObject(s).Msg("wrapping listener with ACL")
s.listener = acl.WrapUDP(s.listener)
}
s.preDial = preDial

View File

@@ -3,6 +3,7 @@ package types
import (
"net/http"
"github.com/rs/zerolog"
"github.com/yusing/godoxy/internal/agentpool"
"github.com/yusing/godoxy/internal/homepage"
nettypes "github.com/yusing/godoxy/internal/net/types"
@@ -18,6 +19,8 @@ type (
task.TaskStarter
task.TaskFinisher
pool.Object
zerolog.LogObjectMarshaler
ProviderName() string
GetProvider() RouteProvider
ListenURL() *nettypes.URL