@@ -46,6 +46,8 @@ import (
46
46
47
47
"cdr.dev/slog"
48
48
"cdr.dev/slog/sloggers/sloghuman"
49
+ "cdr.dev/slog/sloggers/slogjson"
50
+ "cdr.dev/slog/sloggers/slogstackdriver"
49
51
"github.com/coder/coder/buildinfo"
50
52
"github.com/coder/coder/cli/cliui"
51
53
"github.com/coder/coder/cli/config"
@@ -122,13 +124,11 @@ func Server(vip *viper.Viper, newAPI func(context.Context, *coderd.Options) (*co
122
124
}
123
125
124
126
printLogo (cmd )
125
- logger := slog .Make (sloghuman .Sink (cmd .ErrOrStderr ()))
126
- if ok , _ := cmd .Flags ().GetBool (varVerbose ); ok {
127
- logger = logger .Leveled (slog .LevelDebug )
128
- }
129
- if cfg .Trace .CaptureLogs .Value {
130
- logger = logger .AppendSinks (tracing.SlogSink {})
127
+ logger , logCloser , err := makeLogger (cmd , cfg )
128
+ if err != nil {
129
+ return xerrors .Errorf ("make logger: %w" , err )
131
130
}
131
+ defer logCloser ()
132
132
133
133
// Register signals early on so that graceful shutdown can't
134
134
// be interrupted by additional signals. Note that we avoid
@@ -1145,6 +1145,11 @@ func newProvisionerDaemon(
1145
1145
1146
1146
// nolint: revive
1147
1147
func printLogo (cmd * cobra.Command ) {
1148
+ // Only print the logo in TTYs.
1149
+ if ! isTTYOut (cmd ) {
1150
+ return
1151
+ }
1152
+
1148
1153
_ , _ = fmt .Fprintf (cmd .OutOrStdout (), "%s - Software development on your infrastucture\n " , cliui .Styles .Bold .Render ("Coder " + buildinfo .Version ()))
1149
1154
}
1150
1155
@@ -1512,3 +1517,64 @@ func redirectHTTPToAccessURL(handler http.Handler, accessURL *url.URL) http.Hand
1512
1517
func isLocalhost (host string ) bool {
1513
1518
return host == "localhost" || host == "127.0.0.1" || host == "::1"
1514
1519
}
1520
+
1521
+ func makeLogger (cmd * cobra.Command , cfg * codersdk.DeploymentConfig ) (slog.Logger , func (), error ) {
1522
+ var (
1523
+ sinks = []slog.Sink {}
1524
+ closers = []func () error {}
1525
+ )
1526
+
1527
+ if cfg .Logging .Human .Value != "" {
1528
+ if cfg .Logging .Human .Value == "/dev/stderr" {
1529
+ sinks = append (sinks , sloghuman .Sink (cmd .ErrOrStderr ()))
1530
+ } else {
1531
+ fi , err := os .OpenFile (cfg .Logging .Human .Value , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0644 )
1532
+ if err != nil {
1533
+ return slog.Logger {}, nil , xerrors .Errorf ("open human log %q: %w" , cfg .Logging .Human .Value , err )
1534
+ }
1535
+ closers = append (closers , fi .Close )
1536
+ sinks = append (sinks , sloghuman .Sink (fi ))
1537
+ }
1538
+ }
1539
+
1540
+ if cfg .Logging .JSON .Value != "" {
1541
+ if cfg .Logging .JSON .Value == "/dev/stderr" {
1542
+ sinks = append (sinks , slogjson .Sink (cmd .ErrOrStderr ()))
1543
+ } else {
1544
+ fi , err := os .OpenFile (cfg .Logging .JSON .Value , os .O_WRONLY | os .O_CREATE | os .O_APPEND , 0644 )
1545
+ if err != nil {
1546
+ return slog.Logger {}, nil , xerrors .Errorf ("open json log %q: %w" , cfg .Logging .JSON .Value , err )
1547
+ }
1548
+ closers = append (closers , fi .Close )
1549
+ sinks = append (sinks , slogjson .Sink (fi ))
1550
+ }
1551
+ }
1552
+
1553
+ if cfg .Logging .Stackdriver .Value != "" {
1554
+ if cfg .Logging .JSON .Value == "/dev/stderr" {
1555
+ sinks = append (sinks , slogstackdriver .Sink (cmd .ErrOrStderr ()))
1556
+ } else {
1557
+ fi , err := os .OpenFile (cfg .Logging .Stackdriver .Value , os .O_WRONLY | os .O_WRONLY | os .O_APPEND , 0644 )
1558
+ if err != nil {
1559
+ return slog.Logger {}, nil , xerrors .Errorf ("open stackdriver log %q: %w" , cfg .Logging .Stackdriver .Value , err )
1560
+ }
1561
+ closers = append (closers , fi .Close )
1562
+ sinks = append (sinks , slogstackdriver .Sink (fi ))
1563
+ }
1564
+ }
1565
+
1566
+ if cfg .Trace .CaptureLogs .Value {
1567
+ sinks = append (sinks , tracing.SlogSink {})
1568
+ }
1569
+
1570
+ level := slog .LevelInfo
1571
+ if ok , _ := cmd .Flags ().GetBool (varVerbose ); ok {
1572
+ level = slog .LevelDebug
1573
+ }
1574
+
1575
+ return slog .Make (sinks ... ).Leveled (level ), func () {
1576
+ for _ , closer := range closers {
1577
+ _ = closer ()
1578
+ }
1579
+ }, nil
1580
+ }
0 commit comments