I have the following program (using github.com/tetratelabs/log
as the telemetry.Logger implementation): https://go.dev/play/p/zFPUPY_72Jz, I expect executing scopeA.SetLevel(telemetry.LevelInfo)
only updates the scopeA
, however, I saw scopeB
's level is also updated. I believe I missed something obvious here. 🙇🏾
package main
import (
"fmt"
"github.com/tetratelabs/log"
"github.com/tetratelabs/telemetry"
"github.com/tetratelabs/telemetry/scope"
)
func main() {
l := log.New()
a := scope.Register("a", "Messages from a")
b := scope.Register("b", "Messages from b")
scope.UseLogger(l)
scopeA, _ := scope.Find("a")
scopeA.SetLevel(telemetry.LevelDebug)
scopeB, _ := scope.Find("b")
scopeB.SetLevel(telemetry.LevelDebug)
fmt.Println("scopeA == instance a", scopeA == a, scopeA)
fmt.Println("scopeB == instance b", scopeB == b, scopeB)
fmt.Println()
fmt.Println("scope level a", scopeA.Level().String())
fmt.Println("scope level b", scopeB.Level().String()) // despite only updating scope a, scope b level is changed too.
fmt.Println()
print(a)
print(b)
scopeA.SetLevel(telemetry.LevelInfo)
fmt.Println()
fmt.Println("after scope 'a' is updated to info:")
fmt.Println()
fmt.Println("scope level a", scopeA.Level().String())
fmt.Println("scope level b", scopeB.Level().String()) // despite only updating scope a, scope b level is changed too.
print(a)
print(b) // Since we don't update scope 'b', we expect to still see "time="..." level=debug msg="debug" scope="b"" here.
}
func print(logger telemetry.Logger) {
logger.Info("info")
logger.Debug("debug")
}
Output, after scope 'a' is updated to info, I expect scope b to still have that debug part.
scopeA == instance a true &{0xc000060190 [] <nil> <nil> a Messages from a <nil>}
scopeB == instance b true &{0xc000060280 [] <nil> <nil> b Messages from b <nil>}
scope level a debug
scope level b debug
time="2009/11/10 23:00:00" level=info msg="info" scope="a"
time="2009/11/10 23:00:00" level=debug msg="debug" scope="a"
time="2009/11/10 23:00:00" level=info msg="info" scope="b"
time="2009/11/10 23:00:00" level=debug msg="debug" scope="b"
after scope 'a' is updated to info:
scope level a info
scope level b info
time="2009/11/10 23:00:00" level=info msg="info" scope="a"
time="2009/11/10 23:00:00" level=info msg="info" scope="b"
Program exited.