Skip to content

Commit 7676ae2

Browse files
committed
tracer flags auto flag with std lib's pkg
1 parent 71ea756 commit 7676ae2

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

err2_init.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package err2
2+
3+
import (
4+
"flag"
5+
6+
"github.com/lainio/err2/internal/tracer"
7+
)
8+
9+
func init() {
10+
flag.Var(&tracer.Log, "err2-log", "stream for logging")
11+
flag.Var(&tracer.Error, "err2-trace", "stream for error tracing")
12+
flag.Var(&tracer.Panic, "err2-panic-trace", "stream for panic tracing")
13+
}

internal/tracer/tracer.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"io"
66
"os"
77
"sync/atomic"
8+
9+
"github.com/lainio/err2/internal/x"
810
)
911

1012
type value struct {
@@ -37,3 +39,22 @@ func (v *value) Tracer() io.Writer {
3739
func (v *value) SetTracer(w io.Writer) {
3840
v.Store(writer{w: w})
3941
}
42+
43+
// String is part of the flag interfaces
44+
func (v *value) String() string {
45+
return x.Whom(v.Tracer() != nil, "true", "false")
46+
}
47+
48+
// Get is part of the flag interfaces, getter.
49+
func (v *value) Get() any { return nil }
50+
51+
// Set is part of the flag.Value interface.
52+
func (v *value) Set(value string) error {
53+
switch value {
54+
case "stderr":
55+
v.SetTracer(os.Stderr)
56+
case "stdout":
57+
v.SetTracer(os.Stdout)
58+
}
59+
return nil
60+
}

0 commit comments

Comments
 (0)