2026-03-19 16:37:57 +08:00
|
|
|
package starlog
|
|
|
|
|
|
|
|
|
|
import "time"
|
|
|
|
|
|
|
|
|
|
type AsyncMetrics struct {
|
|
|
|
|
Started bool
|
|
|
|
|
QueueLength uint64
|
|
|
|
|
QueueCapacity uint64
|
|
|
|
|
QueueFree uint64
|
|
|
|
|
Dropped uint64
|
|
|
|
|
FallbackToSync bool
|
|
|
|
|
HandlerTimeout time.Duration
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ErrorMetrics struct {
|
|
|
|
|
WriteErrors uint64
|
|
|
|
|
RedactionErrors uint64
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type MetricsSnapshot struct {
|
|
|
|
|
Time time.Time
|
|
|
|
|
LoggerName string
|
|
|
|
|
Level int
|
|
|
|
|
HasWriter bool
|
|
|
|
|
HasSink bool
|
|
|
|
|
HasMultiSink bool
|
|
|
|
|
ArchiveRunning bool
|
|
|
|
|
Pending PendingStats
|
|
|
|
|
Sampling SamplingStats
|
|
|
|
|
Dedup DedupStats
|
|
|
|
|
RateLimit RateLimitStats
|
|
|
|
|
Async AsyncMetrics
|
|
|
|
|
Errors ErrorMetrics
|
|
|
|
|
MultiSink MultiSinkStats
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetAsyncMetrics() AsyncMetrics {
|
2026-03-21 18:40:16 +08:00
|
|
|
return defaultAsyncRuntime().Metrics()
|
2026-03-19 16:37:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (logger *StarLogger) GetMetricsSnapshot() MetricsSnapshot {
|
|
|
|
|
snapshot := MetricsSnapshot{
|
2026-03-21 18:40:16 +08:00
|
|
|
Time: time.Now(),
|
2026-03-19 16:37:57 +08:00
|
|
|
Errors: ErrorMetrics{
|
2026-03-21 18:40:16 +08:00
|
|
|
WriteErrors: 0,
|
2026-03-19 16:37:57 +08:00
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
if logger == nil || logger.logcore == nil {
|
2026-03-21 18:40:16 +08:00
|
|
|
snapshot.Async = GetAsyncMetrics()
|
|
|
|
|
snapshot.Errors.WriteErrors = GetWriteErrorCount()
|
2026-03-19 16:37:57 +08:00
|
|
|
return snapshot
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-21 18:40:16 +08:00
|
|
|
snapshot.Async = logger.GetAsyncMetrics()
|
2026-03-19 16:37:57 +08:00
|
|
|
snapshot.Pending = logger.GetPendingStats()
|
|
|
|
|
snapshot.Sampling = logger.GetSamplingStats()
|
|
|
|
|
snapshot.Dedup = logger.GetDedupStats()
|
|
|
|
|
snapshot.RateLimit = logger.GetRateLimitStats()
|
|
|
|
|
snapshot.Errors.RedactionErrors = logger.GetRedactErrorCount()
|
2026-03-21 18:40:16 +08:00
|
|
|
snapshot.Errors.WriteErrors = logger.GetWriteErrorCount()
|
2026-03-19 16:37:57 +08:00
|
|
|
snapshot.ArchiveRunning = IsArchiveRun(logger)
|
|
|
|
|
|
|
|
|
|
logger.logcore.mu.Lock()
|
|
|
|
|
snapshot.LoggerName = logger.logcore.name
|
|
|
|
|
snapshot.Level = logger.logcore.minLevel
|
|
|
|
|
snapshot.HasWriter = logger.logcore.output != nil
|
|
|
|
|
sink := logger.logcore.sink
|
|
|
|
|
snapshot.HasSink = sink != nil
|
|
|
|
|
logger.logcore.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
if multi, ok := sink.(*MultiSink); ok && multi != nil {
|
|
|
|
|
snapshot.HasMultiSink = true
|
|
|
|
|
snapshot.MultiSink = multi.GetStats()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return snapshot
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (logger *StarLogger) GetAsyncMetrics() AsyncMetrics {
|
2026-03-21 18:40:16 +08:00
|
|
|
if logger == nil {
|
|
|
|
|
return GetAsyncMetrics()
|
|
|
|
|
}
|
|
|
|
|
return logger.asyncRuntime().Metrics()
|
2026-03-19 16:37:57 +08:00
|
|
|
}
|