MCPcopy Create free account
hub / github.com/coder/coder / Build

Method Build

cli/clilog/clilog.go:90–167  ·  view source on GitHub ↗
(inv *serpent.Invocation)

Source from the content-addressed store, hash-verified

88}
89
90func (b *Builder) Build(inv *serpent.Invocation) (log slog.Logger, closeLog func(), err error) {
91 var (
92 sinks = []slog.Sink{}
93 closers = []func() error{}
94 )
95 defer func() {
96 if err != nil {
97 for _, closer := range closers {
98 _ = closer()
99 }
100 }
101 }()
102
103 noopClose := func() {}
104
105 addSinkIfProvided := func(sinkFn func(io.Writer) slog.Sink, loc string) error {
106 switch loc {
107 case "", "/dev/null":
108 case "/dev/stdout":
109 sinks = append(sinks, sinkFn(inv.Stdout))
110
111 case "/dev/stderr":
112 sinks = append(sinks, sinkFn(inv.Stderr))
113
114 default:
115 logWriter := &LumberjackWriteCloseFixer{Writer: &lumberjack.Logger{
116 Filename: loc,
117 MaxSize: 5, // MB
118 // Without this, rotated logs will never be deleted.
119 MaxBackups: 1,
120 }}
121 closers = append(closers, logWriter.Close)
122 sinks = append(sinks, sinkFn(logWriter))
123 }
124 return nil
125 }
126
127 err = addSinkIfProvided(sloghuman.Sink, b.Human)
128 if err != nil {
129 return slog.Logger{}, noopClose, xerrors.Errorf("add human sink: %w", err)
130 }
131 err = addSinkIfProvided(slogjson.Sink, b.JSON)
132 if err != nil {
133 return slog.Logger{}, noopClose, xerrors.Errorf("add json sink: %w", err)
134 }
135 err = addSinkIfProvided(slogstackdriver.Sink, b.Stackdriver)
136 if err != nil {
137 return slog.Logger{}, noopClose, xerrors.Errorf("add stackdriver sink: %w", err)
138 }
139
140 if b.Trace {
141 sinks = append(sinks, tracing.SlogSink{})
142 }
143
144 // User should log to null device if they don't want logs.
145 if len(sinks) == 0 {
146 return slog.Logger{}, noopClose, xerrors.New("no loggers provided, use /dev/null to disable logging")
147 }

Callers

nothing calls this directly

Calls 3

compileMethod · 0.95
NewMethod · 0.65
ErrorfMethod · 0.45

Tested by

no test coverage detected