diff --git a/cmd/launcher/desktop.go b/cmd/launcher/desktop.go
index 85147c803..22ddc8a6f 100644
--- a/cmd/launcher/desktop.go
+++ b/cmd/launcher/desktop.go
@@ -5,15 +5,13 @@ import (
"flag"
"fmt"
"io"
+ "log/slog"
"os"
"os/signal"
"os/user"
"runtime"
"time"
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
- "github.com/kolide/kit/logutil"
"github.com/kolide/kit/ulid"
"github.com/kolide/launcher/ee/agent"
runnerserver "github.com/kolide/launcher/ee/desktop/runner/server"
@@ -75,9 +73,15 @@ func runDesktop(args []string) error {
return fmt.Errorf("parsing flags: %w", err)
}
- // set up logging
- logger := logutil.NewServerLogger(*fldebug)
- logger = log.With(logger,
+ logLevel := slog.LevelInfo
+ if *fldebug {
+ logLevel = slog.LevelDebug
+ }
+
+ slogger := slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{
+ AddSource: true,
+ Level: logLevel,
+ })).With(
"subprocess", "desktop",
"session_pid", os.Getpid(),
)
@@ -85,51 +89,51 @@ func runDesktop(args []string) error {
// Try to get the current user, so we can use the UID for logging. Not a fatal error if we can't, though
user, err := user.Current()
if err != nil {
- level.Debug(logger).Log(
- "msg", "error getting current user",
+ slogger.Log(context.TODO(), slog.LevelDebug,
+ "error getting current user",
"err", err,
)
} else {
- logger = log.With(logger,
- "uid", user.Uid,
- )
+ slogger = slogger.With("uid", user.Uid)
}
- level.Info(logger).Log("msg", "starting")
+ slogger.Log(context.TODO(), slog.LevelInfo,
+ "starting",
+ )
if *flUserServerSocketPath == "" {
*flUserServerSocketPath = defaultUserServerSocketPath()
- level.Info(logger).Log(
- "msg", "using default socket path since none was provided",
+ slogger.Log(context.TODO(), slog.LevelInfo,
+ "using default socket path since none was provided",
"socket_path", *flUserServerSocketPath,
)
}
- runGroup := rungroup.NewRunGroup(logger)
+ runGroup := rungroup.NewRunGroup(slogger)
// listen for signals
runGroup.Add("desktopSignalListener", func() error {
- listenSignals(logger)
+ listenSignals(slogger)
return nil
}, func(error) {})
// Set up notification sending and listening
- notifier := notify.NewDesktopNotifier(logger, *flIconPath)
+ notifier := notify.NewDesktopNotifier(slogger, *flIconPath)
runGroup.Add("desktopNotifier", notifier.Listen, notifier.Interrupt)
// monitor parent
runGroup.Add("desktopMonitorParentProcess", func() error {
- monitorParentProcess(logger, *flRunnerServerUrl, *flRunnerServerAuthToken, 2*time.Second)
+ monitorParentProcess(slogger, *flRunnerServerUrl, *flRunnerServerAuthToken, 2*time.Second)
return nil
}, func(error) {})
shutdownChan := make(chan struct{})
- server, err := userserver.New(logger, *flUserServerAuthToken, *flUserServerSocketPath, shutdownChan, notifier)
+ server, err := userserver.New(slogger, *flUserServerAuthToken, *flUserServerSocketPath, shutdownChan, notifier)
if err != nil {
return err
}
- m := menu.New(logger, *flhostname, *flmenupath)
+ m := menu.New(slogger, *flhostname, *flmenupath)
refreshMenu := func() {
m.Build()
}
@@ -140,8 +144,8 @@ func runDesktop(args []string) error {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
- level.Error(logger).Log(
- "msg", "shutting down server",
+ slogger.Log(context.TODO(), slog.LevelError,
+ "shutting down server",
"err", err,
)
}
@@ -157,7 +161,7 @@ func runDesktop(args []string) error {
// notify runner server when menu opened
runGroup.Add("desktopMenuOpenedListener", func() error {
- notifyRunnerServerMenuOpened(logger, *flRunnerServerUrl, *flRunnerServerAuthToken)
+ notifyRunnerServerMenuOpened(slogger, *flRunnerServerUrl, *flRunnerServerAuthToken)
return nil
}, func(err error) {})
@@ -165,8 +169,8 @@ func runDesktop(args []string) error {
go func() {
// have to run this in a goroutine because menu needs the main thread
if err := runGroup.Run(); err != nil {
- level.Error(logger).Log(
- "msg", "running run group",
+ slogger.Log(context.TODO(), slog.LevelError,
+ "running run group",
"err", err,
)
}
@@ -178,20 +182,20 @@ func runDesktop(args []string) error {
return nil
}
-func listenSignals(logger log.Logger) {
+func listenSignals(slogger *slog.Logger) {
signalsToHandle := []os.Signal{os.Interrupt, os.Kill}
signals := make(chan os.Signal, len(signalsToHandle))
signal.Notify(signals, signalsToHandle...)
sig := <-signals
- level.Debug(logger).Log(
- "msg", "received signal",
+ slogger.Log(context.TODO(), slog.LevelDebug,
+ "received signal",
"signal", sig,
)
}
-func notifyRunnerServerMenuOpened(logger log.Logger, rootServerUrl, authToken string) {
+func notifyRunnerServerMenuOpened(slogger *slog.Logger, rootServerUrl, authToken string) {
client := authedclient.New(authToken, 2*time.Second)
menuOpendUrl := fmt.Sprintf("%s%s", rootServerUrl, runnerserver.MenuOpenedEndpoint)
@@ -200,8 +204,8 @@ func notifyRunnerServerMenuOpened(logger log.Logger, rootServerUrl, authToken st
response, err := client.Get(menuOpendUrl)
if err != nil {
- level.Error(logger).Log(
- "msg", "sending menu opened request to root server",
+ slogger.Log(context.TODO(), slog.LevelError,
+ "sending menu opened request to root server",
"err", err,
)
}
@@ -213,7 +217,7 @@ func notifyRunnerServerMenuOpened(logger log.Logger, rootServerUrl, authToken st
}
// monitorParentProcess continuously checks to see if parent is a live and sends on provided channel if it is not
-func monitorParentProcess(logger log.Logger, runnerServerUrl, runnerServerAuthToken string, interval time.Duration) {
+func monitorParentProcess(slogger *slog.Logger, runnerServerUrl, runnerServerAuthToken string, interval time.Duration) {
ticker := time.NewTicker(interval)
defer ticker.Stop()
@@ -227,8 +231,8 @@ func monitorParentProcess(logger log.Logger, runnerServerUrl, runnerServerAuthTo
for ; true; <-ticker.C {
// check to to ensure that the ppid is still legit
if os.Getppid() < 2 {
- level.Debug(logger).Log(
- "msg", "ppid is 0 or 1, exiting",
+ slogger.Log(context.TODO(), slog.LevelDebug,
+ "ppid is 0 or 1, exiting",
)
break
}
@@ -255,8 +259,8 @@ func monitorParentProcess(logger log.Logger, runnerServerUrl, runnerServerAuthTo
// retry
if errCount < maxErrCount {
- level.Debug(logger).Log(
- "msg", "could not connect to parent, will retry",
+ slogger.Log(context.TODO(), slog.LevelDebug,
+ "could not connect to parent, will retry",
"err", err,
"attempts", errCount,
"max_attempts", maxErrCount,
@@ -265,9 +269,9 @@ func monitorParentProcess(logger log.Logger, runnerServerUrl, runnerServerAuthTo
continue
}
- // errCount => maxErrCount, exit
- level.Debug(logger).Log(
- "msg", "could not connect to parent, max attempts reached, exiting",
+ // errCount >= maxErrCount, exit
+ slogger.Log(context.TODO(), slog.LevelDebug,
+ "could not connect to parent, max attempts reached, exiting",
"err", err,
"attempts", errCount,
"max_attempts", maxErrCount,
diff --git a/cmd/launcher/desktop_test.go b/cmd/launcher/desktop_test.go
index 79a8d06c3..4f495e7d6 100644
--- a/cmd/launcher/desktop_test.go
+++ b/cmd/launcher/desktop_test.go
@@ -3,11 +3,11 @@ package main
import (
"context"
"io"
+ "log/slog"
"net/http"
"testing"
"time"
- "github.com/go-kit/kit/log"
runnerserver "github.com/kolide/launcher/ee/desktop/runner/server"
"github.com/kolide/launcher/pkg/log/multislogger"
"github.com/kolide/launcher/pkg/threadsafebuffer"
@@ -24,8 +24,13 @@ func Test_desktopMonitorParentProcess(t *testing.T) { //nolint:paralleltest
monitorInterval := 250 * time.Millisecond
var logBytes threadsafebuffer.ThreadSafeBuffer
+ slogger := slog.New(slog.NewTextHandler(&logBytes, &slog.HandlerOptions{
+ AddSource: true,
+ Level: slog.LevelDebug,
+ }))
+
go func() {
- monitorParentProcess(log.NewLogfmtLogger(&logBytes), runnerServer.Url(), token, monitorInterval)
+ monitorParentProcess(slogger, runnerServer.Url(), token, monitorInterval)
}()
time.Sleep(monitorInterval * 2)
diff --git a/cmd/launcher/launcher.go b/cmd/launcher/launcher.go
index 2d9943289..6bd895800 100644
--- a/cmd/launcher/launcher.go
+++ b/cmd/launcher/launcher.go
@@ -198,7 +198,7 @@ func runLauncher(ctx context.Context, cancel func(), multiSlogger, systemMultiSl
}
// create a rungroup for all the actors we create to allow for easy start/stop
- runGroup := rungroup.NewRunGroup(logger)
+ runGroup := rungroup.NewRunGroup(slogger)
// Need to set up the log shipper so that we can get the logger early
// and pass it to the various systems.
diff --git a/ee/debug/checkups/logs.go b/ee/debug/checkups/logs.go
index 88fdd77b3..346b834e0 100644
--- a/ee/debug/checkups/logs.go
+++ b/ee/debug/checkups/logs.go
@@ -7,6 +7,7 @@ import (
"io"
"os"
"path/filepath"
+ "runtime"
"github.com/kolide/launcher/ee/agent/types"
)
@@ -46,6 +47,12 @@ func (c *Logs) Run(_ context.Context, fullFH io.Writer) error {
defer logZip.Close()
matches, _ := filepath.Glob(filepath.Join(c.k.RootDirectory(), "debug*"))
+
+ if runtime.GOOS == "darwin" {
+ stdMatches, _ := filepath.Glob("/var/log/kolide-k2/*")
+ matches = append(matches, stdMatches...)
+ }
+
for _, f := range matches {
out, err := logZip.Create(filepath.Base(f))
if err != nil {
diff --git a/ee/desktop/user/client/client_test.go b/ee/desktop/user/client/client_test.go
index fb3efcb97..76f663aec 100644
--- a/ee/desktop/user/client/client_test.go
+++ b/ee/desktop/user/client/client_test.go
@@ -9,9 +9,8 @@ import (
"strings"
"testing"
- "github.com/go-kit/kit/log"
-
"github.com/kolide/launcher/ee/desktop/user/server"
+ "github.com/kolide/launcher/pkg/log/multislogger"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -43,7 +42,7 @@ func TestClient_GetAndShutdown(t *testing.T) {
socketPath := testSocketPath(t)
shutdownChan := make(chan struct{})
- server, err := server.New(log.NewNopLogger(), validAuthToken, socketPath, shutdownChan, nil)
+ server, err := server.New(multislogger.New().Logger, validAuthToken, socketPath, shutdownChan, nil)
require.NoError(t, err)
go func() {
diff --git a/ee/desktop/user/menu/action_flare.go b/ee/desktop/user/menu/action_flare.go
index 4bebe9170..b9fcb3692 100644
--- a/ee/desktop/user/menu/action_flare.go
+++ b/ee/desktop/user/menu/action_flare.go
@@ -1,7 +1,8 @@
package menu
import (
- "github.com/go-kit/kit/log/level"
+ "context"
+ "log/slog"
)
// actionFlare performs the launcher flare action. This will make more sense once flare is uploading
@@ -11,7 +12,10 @@ type actionFlare struct {
func (a actionFlare) Perform(m *menu) {
if err := runFlare(); err != nil {
- level.Error(m.logger).Log("msg", "error creating flare", "err", err)
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "error creating flare",
+ "err", err,
+ )
}
}
diff --git a/ee/desktop/user/menu/action_message.go b/ee/desktop/user/menu/action_message.go
index 080a2e8da..1cbae3a3b 100644
--- a/ee/desktop/user/menu/action_message.go
+++ b/ee/desktop/user/menu/action_message.go
@@ -2,13 +2,14 @@ package menu
import (
"bytes"
+ "context"
"encoding/json"
"fmt"
+ "log/slog"
"net/http"
"os"
"time"
- "github.com/go-kit/kit/log/level"
"github.com/kolide/launcher/ee/desktop/runner/server"
"github.com/kolide/launcher/pkg/authedclient"
)
@@ -22,16 +23,16 @@ type actionMessage struct {
func (a actionMessage) Perform(m *menu) {
runnerServerUrl := os.Getenv("RUNNER_SERVER_URL")
if runnerServerUrl == "" {
- level.Error(m.logger).Log(
- "msg", "runner server url not set",
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "runner server url not set",
)
return
}
runnerServerAuthToken := os.Getenv("RUNNER_SERVER_AUTH_TOKEN")
if runnerServerAuthToken == "" {
- level.Error(m.logger).Log(
- "msg", "runner server auth token not set",
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "runner server auth token not set",
)
return
}
@@ -41,17 +42,18 @@ func (a actionMessage) Perform(m *menu) {
jsonBody, err := json.Marshal(a)
if err != nil {
- level.Error(m.logger).Log(
- "msg", "failed to marshal message body",
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to marshal message body",
"err", err,
)
+
return
}
response, err := client.Post(runnerMessageUrl, "application/json", bytes.NewReader(jsonBody))
if err != nil {
- level.Error(m.logger).Log(
- "msg", "failed to perform message action",
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to perform message action",
"method", a.Method,
"params", a.Params,
"err", err,
@@ -65,8 +67,8 @@ func (a actionMessage) Perform(m *menu) {
}
if response.StatusCode != http.StatusOK {
- level.Error(m.logger).Log(
- "msg", "failed to perform message action",
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to perform message action",
"method", a.Method,
"params", a.Params,
"status_code", response.StatusCode,
diff --git a/ee/desktop/user/menu/action_open_url.go b/ee/desktop/user/menu/action_open_url.go
index 169576f9e..0b45f0a5f 100644
--- a/ee/desktop/user/menu/action_open_url.go
+++ b/ee/desktop/user/menu/action_open_url.go
@@ -1,7 +1,8 @@
package menu
import (
- "github.com/go-kit/kit/log/level"
+ "context"
+ "log/slog"
)
// Performs the OpenURL action
@@ -11,9 +12,10 @@ type actionOpenURL struct {
func (a actionOpenURL) Perform(m *menu) {
if err := open(a.URL); err != nil {
- level.Error(m.logger).Log(
- "msg", "failed to perform action",
- "URL", a.URL,
- "err", err)
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to perform action",
+ "url", a.URL,
+ "err", err,
+ )
}
}
diff --git a/ee/desktop/user/menu/menu.go b/ee/desktop/user/menu/menu.go
index 6d6763233..4cfe76d57 100644
--- a/ee/desktop/user/menu/menu.go
+++ b/ee/desktop/user/menu/menu.go
@@ -1,13 +1,13 @@
package menu
import (
+ "context"
_ "embed"
"encoding/json"
"fmt"
+ "log/slog"
"os"
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
"github.com/kolide/kit/version"
)
@@ -57,14 +57,14 @@ type menuBuilder interface {
// menu handles common functionality like retrieving menu data, and allows menu builders to provide their implementations
type menu struct {
- logger log.Logger
+ slogger *slog.Logger
hostname string
filePath string
}
-func New(logger log.Logger, hostname, filePath string) *menu {
+func New(slogger *slog.Logger, hostname, filePath string) *menu {
m := &menu{
- logger: logger,
+ slogger: slogger.With("component", "desktop_menu"),
hostname: hostname,
filePath: filePath,
}
@@ -85,12 +85,19 @@ func (m *menu) getMenuData() *MenuData {
menuFileBytes, err := os.ReadFile(m.filePath)
if err != nil {
- level.Error(m.logger).Log("msg", "failed to read menu file", "path", m.filePath, "err", err)
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to read menu file",
+ "path", m.filePath,
+ "err", err,
+ )
return &menu
}
if err := json.Unmarshal(menuFileBytes, &menu); err != nil {
- level.Error(m.logger).Log("msg", "failed to unmarshal menu json", "err", err)
+ m.slogger.Log(context.TODO(), slog.LevelError,
+ "failed to unmarshal menu json",
+ "err", err,
+ )
return &menu
}
diff --git a/ee/desktop/user/notify/notify_darwin.go b/ee/desktop/user/notify/notify_darwin.go
index ff9fa780a..ee64bbd0b 100644
--- a/ee/desktop/user/notify/notify_darwin.go
+++ b/ee/desktop/user/notify/notify_darwin.go
@@ -17,21 +17,18 @@ import "C"
import (
"errors"
"fmt"
+ "log/slog"
"os"
"strings"
"unsafe"
-
- "github.com/go-kit/kit/log"
)
type macNotifier struct {
- logger log.Logger
interrupt chan struct{}
}
-func NewDesktopNotifier(logger log.Logger, _ string) *macNotifier {
+func NewDesktopNotifier(_ *slog.Logger, _ string) *macNotifier {
return &macNotifier{
- logger: log.With(logger, "component", "desktop_notifier"),
interrupt: make(chan struct{}),
}
}
diff --git a/ee/desktop/user/notify/notify_linux.go b/ee/desktop/user/notify/notify_linux.go
index 7ac791490..a33977e39 100644
--- a/ee/desktop/user/notify/notify_linux.go
+++ b/ee/desktop/user/notify/notify_linux.go
@@ -6,18 +6,17 @@ package notify
import (
"context"
"fmt"
+ "log/slog"
"sync"
"time"
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
"github.com/godbus/dbus/v5"
"github.com/kolide/launcher/ee/allowedcmd"
)
type dbusNotifier struct {
iconFilepath string
- logger log.Logger
+ slogger *slog.Logger
conn *dbus.Conn
signal chan *dbus.Signal
interrupt chan struct{}
@@ -35,15 +34,18 @@ const (
// the correct default browser.
var browserLaunchers = []allowedcmd.AllowedCommand{allowedcmd.XdgOpen, allowedcmd.XWwwBrowser}
-func NewDesktopNotifier(logger log.Logger, iconFilepath string) *dbusNotifier {
+func NewDesktopNotifier(slogger *slog.Logger, iconFilepath string) *dbusNotifier {
conn, err := dbus.ConnectSessionBus()
if err != nil {
- level.Warn(logger).Log("msg", "couldn't connect to dbus to start notifier listener, proceeding without it", "err", err)
+ slogger.Log(context.TODO(), slog.LevelWarn,
+ "couldn't connect to dbus to start notifier listener, proceeding without it",
+ "err", err,
+ )
}
return &dbusNotifier{
iconFilepath: iconFilepath,
- logger: log.With(logger, "component", "desktop_notifier"),
+ slogger: slogger.With("component", "desktop_notifier"),
conn: conn,
signal: make(chan *dbus.Signal),
interrupt: make(chan struct{}),
@@ -58,12 +60,17 @@ func (d *dbusNotifier) Listen() error {
dbus.WithMatchObjectPath(notificationServiceObj),
dbus.WithMatchInterface(notificationServiceInterface),
); err != nil {
- level.Error(d.logger).Log("msg", "couldn't add match signal", "err", err)
+ d.slogger.Log(context.TODO(), slog.LevelError,
+ "couldn't add match signal",
+ "err", err,
+ )
return fmt.Errorf("couldn't register to listen to signals in dbus: %w", err)
}
d.conn.Signal(d.signal)
} else {
- level.Warn(d.logger).Log("msg", "cannot set up DBUS listener -- no connection to session bus")
+ d.slogger.Log(context.TODO(), slog.LevelWarn,
+ "cannot set up DBUS listener -- no connection to session bus",
+ )
}
for {
@@ -91,7 +98,11 @@ func (d *dbusNotifier) Listen() error {
defer cancel()
cmd, err := browserLauncher(ctx, actionUri)
if err != nil {
- level.Warn(d.logger).Log("msg", "couldn't create command to start process", "err", err, "browser_launcher", browserLauncher)
+ d.slogger.Log(context.TODO(), slog.LevelWarn,
+ "couldn't create command to start process",
+ "err", err,
+ "browser_launcher", browserLauncher,
+ )
continue
}
@@ -99,7 +110,11 @@ func (d *dbusNotifier) Listen() error {
if err == nil {
break
}
- level.Error(d.logger).Log("msg", "couldn't start process", "err", err, "browser_launcher", browserLauncher)
+ d.slogger.Log(context.TODO(), slog.LevelError,
+ "couldn't start process",
+ "err", err,
+ "browser_launcher", browserLauncher,
+ )
}
case <-d.interrupt:
@@ -130,7 +145,10 @@ func (d *dbusNotifier) SendNotification(n Notification) error {
func (d *dbusNotifier) sendNotificationViaDbus(n Notification) error {
conn, err := dbus.ConnectSessionBus()
if err != nil {
- level.Debug(d.logger).Log("msg", "could not connect to dbus, will try alternate method of notification", "err", err)
+ d.slogger.Log(context.TODO(), slog.LevelDebug,
+ "could not connect to dbus, will try alternate method of notification",
+ "err", err,
+ )
return fmt.Errorf("could not connect to dbus: %w", err)
}
@@ -152,7 +170,10 @@ func (d *dbusNotifier) sendNotificationViaDbus(n Notification) error {
int32(0)) // expire_timeout -- 0 means the notification will not expire
if call.Err != nil {
- level.Error(d.logger).Log("msg", "could not send notification via dbus", "err", call.Err)
+ d.slogger.Log(context.TODO(), slog.LevelError,
+ "could not send notification via dbus",
+ "err", call.Err,
+ )
return fmt.Errorf("could not send notification via dbus: %w", call.Err)
}
@@ -160,7 +181,10 @@ func (d *dbusNotifier) sendNotificationViaDbus(n Notification) error {
// so we should be fine to only store these here.
var notificationId uint32
if err := call.Store(¬ificationId); err != nil {
- level.Warn(d.logger).Log("msg", "could not get notification ID from dbus call", "err", err)
+ d.slogger.Log(context.TODO(), slog.LevelWarn,
+ "could not get notification ID from dbus call",
+ "err", err,
+ )
} else {
d.lock.Lock()
defer d.lock.Unlock()
@@ -187,7 +211,11 @@ func (d *dbusNotifier) sendNotificationViaNotifySend(n Notification) error {
return fmt.Errorf("creating command: %w", err)
}
if out, err := cmd.CombinedOutput(); err != nil {
- level.Error(d.logger).Log("msg", "could not send notification via notify-send", "output", string(out), "err", err)
+ d.slogger.Log(context.TODO(), slog.LevelError,
+ "could not send notification via notify-send",
+ "output", string(out),
+ "err", err,
+ )
return fmt.Errorf("could not send notification via notify-send: %s: %w", string(out), err)
}
diff --git a/ee/desktop/user/notify/notify_windows.go b/ee/desktop/user/notify/notify_windows.go
index caea9696a..fe2828f11 100644
--- a/ee/desktop/user/notify/notify_windows.go
+++ b/ee/desktop/user/notify/notify_windows.go
@@ -4,20 +4,19 @@
package notify
import (
- "github.com/go-kit/kit/log"
+ "log/slog"
+
"github.com/kolide/toast"
)
type windowsNotifier struct {
iconFilepath string
- logger log.Logger
interrupt chan struct{}
}
-func NewDesktopNotifier(logger log.Logger, iconFilepath string) *windowsNotifier {
+func NewDesktopNotifier(_ *slog.Logger, iconFilepath string) *windowsNotifier {
return &windowsNotifier{
iconFilepath: iconFilepath,
- logger: log.With(logger, "component", "desktop_notifier"),
interrupt: make(chan struct{}),
}
}
diff --git a/ee/desktop/user/server/server.go b/ee/desktop/user/server/server.go
index 1b006441c..87bd16636 100644
--- a/ee/desktop/user/server/server.go
+++ b/ee/desktop/user/server/server.go
@@ -7,6 +7,7 @@ import (
"context"
"encoding/json"
"io"
+ "log/slog"
"net"
"net/http"
"os"
@@ -14,8 +15,6 @@ import (
"strings"
"time"
- "github.com/go-kit/kit/log"
- "github.com/go-kit/kit/log/level"
"github.com/kolide/launcher/ee/desktop/user/notify"
"github.com/kolide/launcher/pkg/backoff"
)
@@ -27,7 +26,7 @@ type notificationSender interface {
// UserServer provides IPC for the root desktop runner to communicate with the user desktop processes.
// It allows the runner process to send notficaitons and commands to the desktop processes.
type UserServer struct {
- logger log.Logger
+ slogger *slog.Logger
server *http.Server
listener net.Listener
shutdownChan chan<- struct{}
@@ -37,11 +36,11 @@ type UserServer struct {
refreshListeners []func()
}
-func New(logger log.Logger, authToken string, socketPath string, shutdownChan chan<- struct{}, notifier notificationSender) (*UserServer, error) {
+func New(slogger *slog.Logger, authToken string, socketPath string, shutdownChan chan<- struct{}, notifier notificationSender) (*UserServer, error) {
userServer := &UserServer{
shutdownChan: shutdownChan,
authToken: authToken,
- logger: log.With(logger, "component", "desktop_server"),
+ slogger: slogger.With("component", "desktop_server"),
socketPath: socketPath,
notifier: notifier,
}
@@ -74,7 +73,10 @@ func New(logger log.Logger, authToken string, socketPath string, shutdownChan ch
userServer.server.RegisterOnShutdown(func() {
// remove socket on shutdown
if err := userServer.removeSocket(); err != nil {
- level.Error(logger).Log("msg", "removing socket on shutdown", "err", err)
+ slogger.Log(context.TODO(), slog.LevelError,
+ "removing socket on shutdown",
+ "err", err,
+ )
}
})
@@ -119,7 +121,10 @@ func (s *UserServer) notificationHandler(w http.ResponseWriter, req *http.Reques
w.Header().Set("Content-Type", "application/json")
b, err := io.ReadAll(req.Body)
if err != nil {
- level.Error(s.logger).Log("msg", "could not read body of notification request", "err", err)
+ s.slogger.Log(context.TODO(), slog.LevelError,
+ "could not read body of notification request",
+ "err", err,
+ )
w.WriteHeader(http.StatusBadRequest)
return
}
@@ -127,13 +132,19 @@ func (s *UserServer) notificationHandler(w http.ResponseWriter, req *http.Reques
var notificationToSend notify.Notification
if err := json.Unmarshal(b, ¬ificationToSend); err != nil {
- level.Error(s.logger).Log("msg", "could not decode notification request", "err", err)
+ s.slogger.Log(context.TODO(), slog.LevelError,
+ "could not decode notification request",
+ "err", err,
+ )
w.WriteHeader(http.StatusBadRequest)
return
}
if err := s.notifier.SendNotification(notificationToSend); err != nil {
- level.Error(s.logger).Log("msg", "could not send notification", "err", err)
+ s.slogger.Log(context.TODO(), slog.LevelError,
+ "could not send notification",
+ "err", err,
+ )
w.WriteHeader(http.StatusInternalServerError)
return
}
@@ -165,13 +176,17 @@ func (s *UserServer) authMiddleware(next http.Handler) http.Handler {
authHeader := strings.Split(r.Header.Get("Authorization"), "Bearer ")
if len(authHeader) != 2 {
- level.Debug(s.logger).Log("msg", "malformed authorization header")
+ s.slogger.Log(context.TODO(), slog.LevelDebug,
+ "malformed authorization header",
+ )
w.WriteHeader(http.StatusUnauthorized)
return
}
if authHeader[1] != s.authToken {
- level.Debug(s.logger).Log("msg", "invalid authorization token")
+ s.slogger.Log(context.TODO(), slog.LevelDebug,
+ "invalid authorization token",
+ )
w.WriteHeader(http.StatusUnauthorized)
return
}
diff --git a/ee/desktop/user/server/server_test.go b/ee/desktop/user/server/server_test.go
index 3c6980c29..964c4639a 100644
--- a/ee/desktop/user/server/server_test.go
+++ b/ee/desktop/user/server/server_test.go
@@ -4,6 +4,7 @@ import (
"bytes"
"context"
"fmt"
+ "log/slog"
"net/http"
"net/http/httptest"
"os"
@@ -12,7 +13,6 @@ import (
"strings"
"testing"
- "github.com/go-kit/kit/log"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -116,7 +116,12 @@ func testHandler() http.Handler {
func testServer(t *testing.T, authHeader, socketPath string, logBytes *bytes.Buffer) (*UserServer, chan struct{}) {
shutdownChan := make(chan struct{})
- server, err := New(log.NewLogfmtLogger(logBytes), authHeader, socketPath, shutdownChan, nil)
+ slogger := slog.New(slog.NewTextHandler(logBytes, &slog.HandlerOptions{
+ AddSource: true,
+ Level: slog.LevelDebug,
+ }))
+
+ server, err := New(slogger, authHeader, socketPath, shutdownChan, nil)
require.NoError(t, err)
return server, shutdownChan
}
diff --git a/pkg/launcher/paths.go b/pkg/launcher/paths.go
index 8592c54cd..46b8a3229 100644
--- a/pkg/launcher/paths.go
+++ b/pkg/launcher/paths.go
@@ -39,7 +39,7 @@ func DefaultPath(path defaultPath) string {
if runtime.GOOS == "windows" {
switch path {
case RootDirectory:
- return "C:\\Program Files\\Kolide\\Launcher-kolide-k2\\data"
+ return "C:\\ProgramData\\Kolide\\Launcher-kolide-k2\\data"
case WindowsConfigDirectory:
return "C:\\Program Files\\Kolide\\Launcher-kolide-k2\\conf"
case BinDirectory:
diff --git a/pkg/packagekit/assets/main.wxs b/pkg/packagekit/assets/main.wxs
index b9f376bbd..1238c979e 100644
--- a/pkg/packagekit/assets/main.wxs
+++ b/pkg/packagekit/assets/main.wxs
@@ -70,6 +70,7 @@
Level="1"
Display="hidden">
+