Skip to content

Commit 880abde

Browse files
committed
logger updates
1 parent 6cb1ab5 commit 880abde

File tree

6 files changed

+105
-251
lines changed

6 files changed

+105
-251
lines changed

pkg/logger/logger.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package logger
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"strings"
7+
)
8+
9+
type Level int
10+
11+
const (
12+
DEBUG Level = iota
13+
INFO
14+
WARNING
15+
ERROR
16+
CRITICAL
17+
)
18+
19+
var levelNames = map[Level]string{
20+
DEBUG: "DEBUG",
21+
INFO: "INFO",
22+
WARNING: "WARNING",
23+
ERROR: "ERROR",
24+
CRITICAL: "CRITICAL",
25+
}
26+
27+
var level = WARNING // Default to WARNING level
28+
29+
func init() {
30+
// Set log level from environment variable
31+
if levelStr := os.Getenv("JUDGMENT_LOG_LEVEL"); levelStr != "" {
32+
SetLevelFromString(levelStr)
33+
}
34+
}
35+
36+
func SetLevel(l Level) {
37+
level = l
38+
}
39+
40+
func SetLevelFromString(levelStr string) {
41+
switch strings.ToLower(levelStr) {
42+
case "debug":
43+
level = DEBUG
44+
case "info":
45+
level = INFO
46+
case "warning", "warn":
47+
level = WARNING
48+
case "error":
49+
level = ERROR
50+
case "critical":
51+
level = CRITICAL
52+
default:
53+
level = WARNING
54+
}
55+
}
56+
57+
func log(l Level, format string, args ...interface{}) {
58+
if l < level {
59+
return
60+
}
61+
62+
message := fmt.Sprintf(format, args...)
63+
fmt.Printf("[%s] %s\n", levelNames[l], message)
64+
}
65+
66+
func Debug(format string, args ...interface{}) {
67+
log(DEBUG, format, args...)
68+
}
69+
70+
func Info(format string, args ...interface{}) {
71+
log(INFO, format, args...)
72+
}
73+
74+
func Warning(format string, args ...interface{}) {
75+
log(WARNING, format, args...)
76+
}
77+
78+
func Error(format string, args ...interface{}) {
79+
log(ERROR, format, args...)
80+
}
81+
82+
func Critical(format string, args ...interface{}) {
83+
log(CRITICAL, format, args...)
84+
}

pkg/tracer/base_tracer.go

Lines changed: 14 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import (
1010
"github.com/JudgmentLabs/judgeval-go/pkg/env"
1111
"github.com/JudgmentLabs/judgeval-go/pkg/internal/api"
1212
"github.com/JudgmentLabs/judgeval-go/pkg/internal/api/models"
13+
"github.com/JudgmentLabs/judgeval-go/pkg/logger"
1314
"github.com/JudgmentLabs/judgeval-go/pkg/scorers"
1415
"github.com/JudgmentLabs/judgeval-go/pkg/tracer/exporters"
15-
"github.com/JudgmentLabs/judgeval-go/pkg/utils"
1616
"go.opentelemetry.io/otel"
1717
"go.opentelemetry.io/otel/attribute"
1818
sdktrace "go.opentelemetry.io/otel/sdk/trace"
@@ -100,8 +100,8 @@ func NewBaseTracer(config TracerConfiguration, serializer ISerializer, initializ
100100
projectID := resolveProjectID(apiClient, config.ProjectName)
101101

102102
if projectID == "" {
103-
utils.DefaultLogger.Error(fmt.Sprintf("Failed to resolve project %s, please create it first at https://app.judgmentlabs.ai/org/%s/projects. Skipping Judgment export.",
104-
config.ProjectName, config.OrganizationID))
103+
logger.Error("Failed to resolve project %s, please create it first at https://app.judgmentlabs.ai/org/%s/projects. Skipping Judgment export.",
104+
config.ProjectName, config.OrganizationID)
105105
}
106106

107107
tracer := otel.Tracer(TracerName)
@@ -127,7 +127,7 @@ func (bt *BaseTracer) Initialize() {
127127

128128
func (bt *BaseTracer) GetSpanExporter() sdktrace.SpanExporter {
129129
if bt.projectID == "" {
130-
utils.DefaultLogger.Error("Project not resolved; cannot create exporter, returning NoOpSpanExporter")
130+
logger.Error("Project not resolved; cannot create exporter, returning NoOpSpanExporter")
131131
return exporters.NewNoOpSpanExporter()
132132
}
133133
return bt.createJudgmentSpanExporter(bt.projectID)
@@ -145,64 +145,36 @@ func (bt *BaseTracer) SetAttribute(span trace.Span, key string, value interface{
145145
}
146146
}
147147

148-
func (bt *BaseTracer) AsyncEvaluate(scorer scorers.BaseScorer, example *data.Example, model string) {
149-
if !bt.configuration.EnableEvaluation {
150-
return
151-
}
152-
153-
span := trace.SpanFromContext(context.Background())
154-
utils.DefaultLogger.Info(fmt.Sprintf("DEBUG: AsyncEvaluate - Span found: %v, IsRecording: %v", span != nil, span.IsRecording()))
155-
156-
if !span.IsRecording() {
157-
utils.DefaultLogger.Info("DEBUG: Span not recording, returning")
158-
return
159-
}
160-
161-
spanContext := span.SpanContext()
162-
traceID := spanContext.TraceID().String()
163-
spanID := spanContext.SpanID().String()
164-
165-
utils.DefaultLogger.Info(fmt.Sprintf("asyncEvaluate: project=%s, traceId=%s, spanId=%s, scorer=%s",
166-
bt.configuration.ProjectName, traceID, spanID, scorer.GetName()))
167-
168-
evaluationRun := bt.createEvaluationRun(scorer, example, model, traceID, spanID)
169-
bt.enqueueEvaluation(evaluationRun)
170-
}
171-
172-
func (bt *BaseTracer) AsyncEvaluateWithContext(ctx context.Context, scorer scorers.BaseScorer, example *data.Example, model string) {
148+
func (bt *BaseTracer) AsyncEvaluate(ctx context.Context, scorer scorers.BaseScorer, example *data.Example, model string) {
173149
if !bt.configuration.EnableEvaluation {
174150
return
175151
}
176152

177153
span := trace.SpanFromContext(ctx)
178-
utils.DefaultLogger.Info(fmt.Sprintf("DEBUG: AsyncEvaluateWithContext - Span found: %v, IsRecording: %v", span != nil, span.IsRecording()))
154+
logger.Debug("AsyncEvaluate - Span found: %v, IsRecording: %v", span != nil, span.IsRecording())
179155

180156
if !span.IsRecording() {
181-
utils.DefaultLogger.Info("DEBUG: Span not recording, returning")
157+
logger.Debug("Span not recording, returning")
182158
return
183159
}
184160

185161
spanContext := span.SpanContext()
186162
traceID := spanContext.TraceID().String()
187163
spanID := spanContext.SpanID().String()
188164

189-
utils.DefaultLogger.Info(fmt.Sprintf("asyncEvaluate: project=%s, traceId=%s, spanId=%s, scorer=%s",
190-
bt.configuration.ProjectName, traceID, spanID, scorer.GetName()))
165+
logger.Info("asyncEvaluate: project=%s, traceId=%s, spanId=%s, scorer=%s",
166+
bt.configuration.ProjectName, traceID, spanID, scorer.GetName())
191167

192168
evaluationRun := bt.createEvaluationRun(scorer, example, model, traceID, spanID)
193169
bt.enqueueEvaluation(evaluationRun)
194170
}
195171

196-
func (bt *BaseTracer) AsyncEvaluateWithDefaultModel(scorer scorers.BaseScorer, example *data.Example) {
197-
bt.AsyncEvaluate(scorer, example, "")
198-
}
199-
200-
func (bt *BaseTracer) AsyncTraceEvaluate(scorer scorers.BaseScorer, model string) {
172+
func (bt *BaseTracer) AsyncTraceEvaluate(ctx context.Context, scorer scorers.BaseScorer, model string) {
201173
if !bt.configuration.EnableEvaluation {
202174
return
203175
}
204176

205-
span := trace.SpanFromContext(context.Background())
177+
span := trace.SpanFromContext(ctx)
206178
if !span.IsRecording() {
207179
return
208180
}
@@ -211,19 +183,15 @@ func (bt *BaseTracer) AsyncTraceEvaluate(scorer scorers.BaseScorer, model string
211183
traceID := spanContext.TraceID().String()
212184
spanID := spanContext.SpanID().String()
213185

214-
utils.DefaultLogger.Info(fmt.Sprintf("asyncTraceEvaluate: project=%s, traceId=%s, spanId=%s, scorer=%s",
215-
bt.configuration.ProjectName, traceID, spanID, scorer.GetName()))
186+
logger.Info("asyncTraceEvaluate: project=%s, traceId=%s, spanId=%s, scorer=%s",
187+
bt.configuration.ProjectName, traceID, spanID, scorer.GetName())
216188

217189
evaluationRun := bt.createTraceEvaluationRun(scorer, model, traceID, spanID)
218190

219191
traceEvalJSON := bt.serializer.Serialize(evaluationRun)
220192
span.SetAttributes(attribute.String(AttributeKeys.PendingTraceEval, traceEvalJSON))
221193
}
222194

223-
func (bt *BaseTracer) AsyncTraceEvaluateWithDefaultModel(scorer scorers.BaseScorer) {
224-
bt.AsyncTraceEvaluate(scorer, "")
225-
}
226-
227195
func (bt *BaseTracer) SetAttributes(span trace.Span, attributes map[string]interface{}) {
228196
if attributes == nil {
229197
return
@@ -348,7 +316,7 @@ func (bt *BaseTracer) createTraceEvaluationRun(scorer scorers.BaseScorer, model,
348316
func (bt *BaseTracer) enqueueEvaluation(evaluationRun *data.ExampleEvaluationRun) {
349317
_, err := bt.apiClient.AddToRunEvalQueue(evaluationRun.ExampleEvaluationRun)
350318
if err != nil {
351-
utils.DefaultLogger.Error(fmt.Sprintf("Failed to enqueue evaluation run: %v", err))
319+
logger.Error("Failed to enqueue evaluation run: %v", err)
352320
}
353321
}
354322

pkg/tracer/exporters/judgment_span_exporter.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package exporters
22

33
import (
44
"context"
5-
"fmt"
65
"net/http"
76
"time"
87

9-
"github.com/JudgmentLabs/judgeval-go/pkg/utils"
8+
"github.com/JudgmentLabs/judgeval-go/pkg/logger"
109
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
1110
"go.opentelemetry.io/otel/sdk/trace"
1211
)
@@ -66,7 +65,7 @@ func (b *JudgmentSpanExporterBuilder) Build() *JudgmentSpanExporter {
6665
}
6766

6867
client := &http.Client{
69-
Timeout: 30 * time.Second,
68+
Timeout: 60 * time.Second,
7069
}
7170

7271
delegate, err := otlptracehttp.New(
@@ -93,16 +92,16 @@ func (b *JudgmentSpanExporterBuilder) Build() *JudgmentSpanExporter {
9392
}
9493

9594
func (j *JudgmentSpanExporter) ExportSpans(ctx context.Context, spans []trace.ReadOnlySpan) error {
96-
utils.DefaultLogger.Info(fmt.Sprintf("Exported %d spans", len(spans)))
95+
logger.Info("JudgmentSpanExporter: Exported %d spans", len(spans))
9796
return j.delegate.ExportSpans(ctx, spans)
9897
}
9998

10099
func (j *JudgmentSpanExporter) Shutdown(ctx context.Context) error {
101-
utils.DefaultLogger.Info(fmt.Sprintf("Shutting down exporter for project %s", j.projectID))
100+
logger.Info("JudgmentSpanExporter: Shutting down exporter for project %s", j.projectID)
102101
return j.delegate.Shutdown(ctx)
103102
}
104103

105104
func (j *JudgmentSpanExporter) ForceFlush(ctx context.Context) error {
106-
utils.DefaultLogger.Info(fmt.Sprintf("Force flushing spans for project %s", j.projectID))
105+
logger.Info("JudgmentSpanExporter: Force flushing spans for project %s", j.projectID)
107106
return nil
108107
}

pkg/tracer/exporters/noop_span_exporter.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package exporters
22

33
import (
44
"context"
5-
"fmt"
65

76
"go.opentelemetry.io/otel/sdk/trace"
87
)
@@ -14,16 +13,13 @@ func NewNoOpSpanExporter() *NoOpSpanExporter {
1413
}
1514

1615
func (n *NoOpSpanExporter) ExportSpans(ctx context.Context, spans []trace.ReadOnlySpan) error {
17-
fmt.Printf("NoOpSpanExporter: Ignoring %d spans\n", len(spans))
1816
return nil
1917
}
2018

2119
func (n *NoOpSpanExporter) Shutdown(ctx context.Context) error {
22-
fmt.Printf("NoOpSpanExporter: Shutdown called\n")
2320
return nil
2421
}
2522

2623
func (n *NoOpSpanExporter) ForceFlush(ctx context.Context) error {
27-
fmt.Printf("NoOpSpanExporter: ForceFlush called\n")
2824
return nil
2925
}

pkg/tracer/tracer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package tracer
22

33
import (
44
"context"
5-
"fmt"
65

6+
"github.com/JudgmentLabs/judgeval-go/pkg/logger"
77
"github.com/JudgmentLabs/judgeval-go/pkg/version"
88
"go.opentelemetry.io/otel"
99
"go.opentelemetry.io/otel/sdk/resource"
@@ -85,7 +85,7 @@ func (t *Tracer) Initialize() {
8585
resource.WithFromEnv(),
8686
)
8787
if err != nil {
88-
fmt.Printf("Failed to create resource: %v\n", err)
88+
logger.Error("Failed to create resource: %v", err)
8989
return
9090
}
9191

0 commit comments

Comments
 (0)