@@ -5,36 +5,28 @@ package minsev_test
55
66import (
77 "context"
8+ "encoding/json"
89 "fmt"
910 "os"
10- "strings"
11- "sync"
1211
1312 "go.opentelemetry.io/otel/log"
1413 logsdk "go.opentelemetry.io/otel/sdk/log"
1514
1615 "go.opentelemetry.io/contrib/processors/minsev"
1716)
1817
19- const key = "OTEL_LOG_LEVEL"
20-
21- var getSeverity = sync .OnceValue (func () log.Severity {
22- conv := map [string ]log.Severity {
23- "" : log .SeverityInfo , // Default to SeverityInfo for unset.
24- "debug" : log .SeverityDebug ,
25- "info" : log .SeverityInfo ,
26- "warn" : log .SeverityWarn ,
27- "error" : log .SeverityError ,
28- }
29- // log.SeverityUndefined for unknown values.
30- return conv [strings .ToLower (os .Getenv (key ))]
31- })
32-
33- type EnvSeverity struct {}
18+ type EnvSeverity struct {
19+ Var string
20+ }
3421
35- func (EnvSeverity ) Severity () log.Severity { return getSeverity () }
22+ func (s EnvSeverity ) Severity () log.Severity {
23+ var sev minsev.Severity
24+ _ = sev .UnmarshalText ([]byte (os .Getenv (s .Var )))
25+ return sev .Severity () // Default to SeverityInfo if not set or error.
26+ }
3627
37- func ExampleSeveritier () {
28+ func ExampleSeveritier_environment () {
29+ const key = "LOG_LEVEL"
3830 // Mock an environmental variable setup that would be done externally.
3931 _ = os .Setenv (key , "error" )
4032
@@ -43,7 +35,7 @@ func ExampleSeveritier() {
4335
4436 // Wrap the processor so that it filters by severity level defined
4537 // via environmental variable.
46- processor = minsev .NewLogProcessor (processor , EnvSeverity {})
38+ processor = minsev .NewLogProcessor (processor , EnvSeverity {key })
4739 lp := logsdk .NewLoggerProvider (
4840 logsdk .WithProcessor (processor ),
4941 )
@@ -62,3 +54,42 @@ func ExampleSeveritier() {
6254 // false
6355 // true
6456}
57+
58+ func ExampleSeveritier_json () {
59+ // Demonstrates how to use a Severitier that reads from a JSON
60+ // configuration.
61+
62+ // Example JSON configuration that specifies the minimum severity level.
63+ // This would be provided by the application user.
64+ const jsonConfig = `{"log_level":"error"}`
65+
66+ var config struct {
67+ Severity minsev.Severity `json:"log_level"`
68+ }
69+ if err := json .Unmarshal ([]byte (jsonConfig ), & config ); err != nil {
70+ panic (err )
71+ }
72+
73+ // Existing processor that emits telemetry.
74+ var processor logsdk.Processor = logsdk .NewBatchProcessor (nil )
75+
76+ // Wrap the processor so that it filters by severity level defined
77+ // in the JSON configuration. Note that the severity level itself is a
78+ // Severitier implementation.
79+ processor = minsev .NewLogProcessor (processor , config .Severity )
80+ lp := logsdk .NewLoggerProvider (logsdk .WithProcessor (processor ))
81+
82+ // Show that Logs API respects the minimum severity level processor.
83+ l := lp .Logger ("ExampleSeveritier" )
84+
85+ ctx := context .Background ()
86+ params := log.EnabledParameters {Severity : log .SeverityDebug }
87+ fmt .Println (l .Enabled (ctx , params ))
88+
89+ params .Severity = log .SeverityError
90+ fmt .Println (l .Enabled (ctx , params ))
91+
92+ // Output:
93+ // false
94+ // true
95+ }
0 commit comments