diff --git a/cmd/headscale/cli/configtest.go b/cmd/headscale/cli/configtest.go index d469885b..0247249e 100644 --- a/cmd/headscale/cli/configtest.go +++ b/cmd/headscale/cli/configtest.go @@ -16,7 +16,7 @@ var configTestCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { _, err := newHeadscaleServerWithConfig() if err != nil { - log.Fatal().Caller().Err(err).Msg("Error initializing") + log.Fatal().Caller().Err(err).Msg("error initializing") } }, } diff --git a/cmd/headscale/cli/mockoidc.go b/cmd/headscale/cli/mockoidc.go index c0e30841..9668f880 100644 --- a/cmd/headscale/cli/mockoidc.go +++ b/cmd/headscale/cli/mockoidc.go @@ -36,7 +36,7 @@ var mockOidcCmd = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { err := mockOIDC() if err != nil { - log.Error().Err(err).Msgf("Error running mock OIDC server") + log.Error().Err(err).Msgf("error running mock OIDC server") os.Exit(1) } }, @@ -81,7 +81,7 @@ func mockOIDC() error { log.Info().Interface(zf.Users, users).Msg("loading users from JSON") - log.Info().Msgf("Access token TTL: %s", accessTTL) + log.Info().Msgf("access token TTL: %s", accessTTL) port, err := strconv.Atoi(portStr) if err != nil { @@ -102,8 +102,9 @@ func mockOIDC() error { if err != nil { return err } - log.Info().Msgf("Mock OIDC server listening on %s", listener.Addr().String()) - log.Info().Msgf("Issuer: %s", mock.Issuer()) + + log.Info().Msgf("mock OIDC server listening on %s", listener.Addr().String()) + log.Info().Msgf("issuer: %s", mock.Issuer()) c := make(chan struct{}) <-c @@ -136,10 +137,10 @@ func getMockOIDC(clientID string, clientSecret string, users []mockoidc.MockUser mock.AddMiddleware(func(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - log.Info().Msgf("Request: %+v", r) + log.Info().Msgf("request: %+v", r) h.ServeHTTP(w, r) if r.Response != nil { - log.Info().Msgf("Response: %+v", r.Response) + log.Info().Msgf("response: %+v", r.Response) } }) }) diff --git a/cmd/headscale/cli/root.go b/cmd/headscale/cli/root.go index d7cdabb6..4eaf0586 100644 --- a/cmd/headscale/cli/root.go +++ b/cmd/headscale/cli/root.go @@ -48,12 +48,12 @@ func initConfig() { if cfgFile != "" { err := types.LoadConfig(cfgFile, true) if err != nil { - log.Fatal().Caller().Err(err).Msgf("Error loading config file %s", cfgFile) + log.Fatal().Caller().Err(err).Msgf("error loading config file %s", cfgFile) } } else { err := types.LoadConfig("", false) if err != nil { - log.Fatal().Caller().Err(err).Msgf("Error loading config") + log.Fatal().Caller().Err(err).Msgf("error loading config") } } diff --git a/cmd/headscale/cli/serve.go b/cmd/headscale/cli/serve.go index 8f05f851..e777b029 100644 --- a/cmd/headscale/cli/serve.go +++ b/cmd/headscale/cli/serve.go @@ -29,12 +29,12 @@ var serveCmd = &cobra.Command{ fmt.Println(squibbleErr.Diff) } - log.Fatal().Caller().Err(err).Msg("Error initializing") + log.Fatal().Caller().Err(err).Msg("error initializing") } err = app.Serve() if err != nil && !errors.Is(err, http.ErrServerClosed) { - log.Fatal().Caller().Err(err).Msg("Headscale ran into an error and had to shut down.") + log.Fatal().Caller().Err(err).Msg("headscale ran into an error and had to shut down") } }, } diff --git a/cmd/headscale/cli/users.go b/cmd/headscale/cli/users.go index 28e5e324..282c7a6c 100644 --- a/cmd/headscale/cli/users.go +++ b/cmd/headscale/cli/users.go @@ -82,7 +82,7 @@ var createUserCmd = &cobra.Command{ defer cancel() defer conn.Close() - log.Trace().Interface(zf.Client, client).Msg("Obtained gRPC client") + log.Trace().Interface(zf.Client, client).Msg("obtained gRPC client") request := &v1.CreateUserRequest{Name: userName} @@ -108,7 +108,7 @@ var createUserCmd = &cobra.Command{ request.PictureUrl = pictureURL } - log.Trace().Interface(zf.Request, request).Msg("Sending CreateUser request") + log.Trace().Interface(zf.Request, request).Msg("sending CreateUser request") response, err := client.CreateUser(ctx, request) if err != nil { ErrorOutput( diff --git a/cmd/headscale/cli/utils.go b/cmd/headscale/cli/utils.go index 67434b92..dabc7884 100644 --- a/cmd/headscale/cli/utils.go +++ b/cmd/headscale/cli/utils.go @@ -93,7 +93,7 @@ func newHeadscaleCLIWithConfig() (context.Context, v1.HeadscaleServiceClient, *g // If we are not connecting to a local server, require an API key for authentication apiKey := cfg.CLI.APIKey if apiKey == "" { - log.Fatal().Caller().Msgf("HEADSCALE_CLI_API_KEY environment variable needs to be set.") + log.Fatal().Caller().Msgf("HEADSCALE_CLI_API_KEY environment variable needs to be set") } grpcOptions = append(grpcOptions, grpc.WithPerRPCCredentials(tokenAuth{ @@ -119,10 +119,10 @@ func newHeadscaleCLIWithConfig() (context.Context, v1.HeadscaleServiceClient, *g } } - log.Trace().Caller().Str(zf.Address, address).Msg("Connecting via gRPC") + log.Trace().Caller().Str(zf.Address, address).Msg("connecting via gRPC") conn, err := grpc.DialContext(ctx, address, grpcOptions...) if err != nil { - log.Fatal().Caller().Err(err).Msgf("Could not connect: %v", err) + log.Fatal().Caller().Err(err).Msgf("could not connect: %v", err) os.Exit(-1) // we get here if logging is suppressed (i.e., json output) } diff --git a/hscontrol/app.go b/hscontrol/app.go index f0217172..ca81a17a 100644 --- a/hscontrol/app.go +++ b/hscontrol/app.go @@ -140,19 +140,19 @@ func NewHeadscale(cfg *types.Config) (*Headscale, error) { ephemeralGC := db.NewEphemeralGarbageCollector(func(ni types.NodeID) { node, ok := app.state.GetNodeByID(ni) if !ok { - log.Error().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed") - log.Debug().Caller().Uint64("node.id", ni.Uint64()).Msg("Ephemeral node deletion failed because node not found in NodeStore") + log.Error().Uint64("node.id", ni.Uint64()).Msg("ephemeral node deletion failed") + log.Debug().Caller().Uint64("node.id", ni.Uint64()).Msg("ephemeral node deletion failed because node not found in NodeStore") return } policyChanged, err := app.state.DeleteNode(node) if err != nil { - log.Error().Err(err).EmbedObject(node).Msg("Ephemeral node deletion failed") + log.Error().Err(err).EmbedObject(node).Msg("ephemeral node deletion failed") return } app.Change(policyChanged) - log.Debug().Caller().EmbedObject(node).Msg("Ephemeral node deleted because garbage collection timeout reached") + log.Debug().Caller().EmbedObject(node).Msg("ephemeral node deleted because garbage collection timeout reached") }) app.ephemeralGC = ephemeralGC @@ -286,7 +286,7 @@ func (h *Headscale) scheduledTasks(ctx context.Context) { } case <-derpTickerChan: - log.Info().Msg("Fetching DERPMap updates") + log.Info().Msg("fetching DERPMap updates") derpMap, err := backoff.Retry(ctx, func() (*tailcfg.DERPMap, error) { derpMap, err := derp.GetDERPMap(h.cfg.DERP) if err != nil { @@ -506,7 +506,7 @@ func (h *Headscale) Serve() error { } versionInfo := types.GetVersionInfo() - log.Info().Str("version", versionInfo.Version).Str("commit", versionInfo.Commit).Msg("Starting Headscale") + log.Info().Str("version", versionInfo.Version).Str("commit", versionInfo.Commit).Msg("starting headscale") log.Info(). Str("minimum_version", capver.TailscaleVersion(capver.MinSupportedCapabilityVersion)). Msg("Clients with a lower minimum version will be rejected") @@ -662,7 +662,7 @@ func (h *Headscale) Serve() error { var grpcServer *grpc.Server var grpcListener net.Listener if tlsConfig != nil || h.cfg.GRPCAllowInsecure { - log.Info().Msgf("Enabling remote gRPC at %s", h.cfg.GRPCAddr) + log.Info().Msgf("enabling remote gRPC at %s", h.cfg.GRPCAddr) grpcOptions := []grpc.ServerOption{ grpc.ChainUnaryInterceptor( @@ -940,13 +940,13 @@ func (h *Headscale) getTLSSettings() (*tls.Config, error) { } } else if h.cfg.TLS.CertPath == "" { if !strings.HasPrefix(h.cfg.ServerURL, "http://") { - log.Warn().Msg("Listening without TLS but ServerURL does not start with http://") + log.Warn().Msg("listening without TLS but ServerURL does not start with http://") } return nil, err } else { if !strings.HasPrefix(h.cfg.ServerURL, "https://") { - log.Warn().Msg("Listening with TLS but ServerURL does not start with https://") + log.Warn().Msg("listening with TLS but ServerURL does not start with https://") } tlsConfig := &tls.Config{ @@ -970,7 +970,7 @@ func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { privateKey, err := os.ReadFile(path) if errors.Is(err, os.ErrNotExist) { - log.Info().Str("path", path).Msg("No private key file at path, creating...") + log.Info().Str("path", path).Msg("no private key file at path, creating...") machineKey := key.NewMachine() @@ -1023,7 +1023,7 @@ type acmeLogger struct { func (l *acmeLogger) RoundTrip(req *http.Request) (*http.Response, error) { resp, err := l.rt.RoundTrip(req) if err != nil { - log.Error().Err(err).Str("url", req.URL.String()).Msg("ACME request failed") + log.Error().Err(err).Str("url", req.URL.String()).Msg("acme request failed") return nil, err } @@ -1031,7 +1031,7 @@ func (l *acmeLogger) RoundTrip(req *http.Request) (*http.Response, error) { defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) - log.Error().Int("status_code", resp.StatusCode).Str("url", req.URL.String()).Bytes("body", body).Msg("ACME request returned error") + log.Error().Int("status_code", resp.StatusCode).Str("url", req.URL.String()).Bytes("body", body).Msg("acme request returned error") } return resp, nil diff --git a/hscontrol/auth.go b/hscontrol/auth.go index d502cd31..a1ba0a3b 100644 --- a/hscontrol/auth.go +++ b/hscontrol/auth.go @@ -320,7 +320,7 @@ func (h *Headscale) reqToNewRegisterResponse( nodeToRegister.Node.Expiry = &req.Expiry } - log.Info().Msgf("New followup node registration using key: %s", newRegID) + log.Info().Msgf("new followup node registration using key: %s", newRegID) h.state.SetRegistrationCacheEntry(newRegID, nodeToRegister) return &tailcfg.RegisterResponse{ @@ -451,7 +451,7 @@ func (h *Headscale) handleRegisterInteractive( nodeToRegister, ) - log.Info().Msgf("Starting node registration using key: %s", registrationId) + log.Info().Msgf("starting node registration using key: %s", registrationId) return &tailcfg.RegisterResponse{ AuthURL: h.authProvider.AuthURL(registrationId), diff --git a/hscontrol/db/db.go b/hscontrol/db/db.go index dcc9e78d..b1a6d52b 100644 --- a/hscontrol/db/db.go +++ b/hscontrol/db/db.go @@ -245,11 +245,11 @@ AND auth_key_id NOT IN ( Migrate: func(tx *gorm.DB) error { // Only run on SQLite if cfg.Database.Type != types.DatabaseSqlite { - log.Info().Msg("Skipping schema migration on non-SQLite database") + log.Info().Msg("skipping schema migration on non-SQLite database") return nil } - log.Info().Msg("Starting schema recreation with table renaming") + log.Info().Msg("starting schema recreation with table renaming") // Rename existing tables to _old versions tablesToRename := []string{"users", "pre_auth_keys", "api_keys", "nodes", "policies"} @@ -258,7 +258,7 @@ AND auth_key_id NOT IN ( var routesExists bool err := tx.Raw("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='routes'").Row().Scan(&routesExists) if err == nil && routesExists { - log.Info().Msg("Dropping leftover routes table") + log.Info().Msg("dropping leftover routes table") if err := tx.Exec("DROP TABLE routes").Error; err != nil { return fmt.Errorf("dropping routes table: %w", err) } @@ -425,11 +425,11 @@ AND auth_key_id NOT IN ( // Drop old tables only after everything succeeds for _, table := range tablesToRename { if err := tx.Exec("DROP TABLE IF EXISTS " + table + "_old").Error; err != nil { - log.Warn().Str("table", table+"_old").Err(err).Msg("Failed to drop old table, but migration succeeded") + log.Warn().Str("table", table+"_old").Err(err).Msg("failed to drop old table, but migration succeeded") } } - log.Info().Msg("Schema recreation completed successfully") + log.Info().Msg("schema recreation completed successfully") return nil }, @@ -595,12 +595,12 @@ AND auth_key_id NOT IN ( // 1. Load policy from file or database based on configuration policyData, err := PolicyBytes(tx, cfg) if err != nil { - log.Warn().Err(err).Msg("Failed to load policy, skipping RequestTags migration (tags will be validated on node reconnect)") + log.Warn().Err(err).Msg("failed to load policy, skipping RequestTags migration (tags will be validated on node reconnect)") return nil } if len(policyData) == 0 { - log.Info().Msg("No policy found, skipping RequestTags migration (tags will be validated on node reconnect)") + log.Info().Msg("no policy found, skipping RequestTags migration (tags will be validated on node reconnect)") return nil } @@ -618,7 +618,7 @@ AND auth_key_id NOT IN ( // 3. Create PolicyManager (handles HuJSON parsing, groups, nested tags, etc.) polMan, err := policy.NewPolicyManager(policyData, users, nodes.ViewSlice()) if err != nil { - log.Warn().Err(err).Msg("Failed to parse policy, skipping RequestTags migration (tags will be validated on node reconnect)") + log.Warn().Err(err).Msg("failed to parse policy, skipping RequestTags migration (tags will be validated on node reconnect)") return nil } @@ -935,7 +935,7 @@ func runMigrations(cfg types.DatabaseConfig, dbConn *gorm.DB, migrations *gormig } for _, migrationID := range migrationIDs { - log.Trace().Caller().Str("migration_id", migrationID).Msg("Running migration") + log.Trace().Caller().Str("migration_id", migrationID).Msg("running migration") needsFKDisabled := migrationsRequiringFKDisabled[migrationID] if needsFKDisabled { diff --git a/hscontrol/db/ip.go b/hscontrol/db/ip.go index c6a223bc..7e6016ea 100644 --- a/hscontrol/db/ip.go +++ b/hscontrol/db/ip.go @@ -283,7 +283,7 @@ func (db *HSDatabase) BackfillNodeIPs(i *IPAllocator) ([]string, error) { } for _, node := range nodes { - log.Trace().Caller().EmbedObject(node).Msg("IP backfill check started because node found in database") + log.Trace().Caller().EmbedObject(node).Msg("ip backfill check started because node found in database") changed := false // IPv4 prefix is set, but node ip is missing, alloc diff --git a/hscontrol/db/node.go b/hscontrol/db/node.go index a9101938..f8885db4 100644 --- a/hscontrol/db/node.go +++ b/hscontrol/db/node.go @@ -370,7 +370,7 @@ func RegisterNodeForTest(tx *gorm.DB, node types.Node, ipv4 *netip.Addr, ipv6 *n logEvent = logEvent.Str(zf.UserName, "none") } - logEvent.Msg("Registering test node") + logEvent.Msg("registering test node") // If the a new node is registered with the same machine key, to the same user, // update the existing node. @@ -418,7 +418,7 @@ func RegisterNodeForTest(tx *gorm.DB, node types.Node, ipv4 *netip.Addr, ipv6 *n node.Hostname, err = util.NormaliseHostname(node.Hostname) if err != nil { newHostname := util.InvalidString() - log.Info().Err(err).Str(zf.InvalidHostname, node.Hostname).Str(zf.NewHostname, newHostname).Msgf("Invalid hostname, replacing") + log.Info().Err(err).Str(zf.InvalidHostname, node.Hostname).Str(zf.NewHostname, newHostname).Msgf("invalid hostname, replacing") node.Hostname = newHostname } diff --git a/hscontrol/derp/server/derp_server.go b/hscontrol/derp/server/derp_server.go index 474306e5..8f1545ba 100644 --- a/hscontrol/derp/server/derp_server.go +++ b/hscontrol/derp/server/derp_server.go @@ -54,7 +54,7 @@ func NewDERPServer( derpKey key.NodePrivate, cfg *types.DERPConfig, ) (*DERPServer, error) { - log.Trace().Caller().Msg("Creating new embedded DERP server") + log.Trace().Caller().Msg("creating new embedded DERP server") server := derpserver.New(derpKey, util.TSLogfWrapper()) // nolint // zerolinter complains if cfg.ServerVerifyClients { @@ -100,11 +100,11 @@ func (d *DERPServer) GenerateRegion() (tailcfg.DERPRegion, error) { if debugUseDERPIP { ips, err := net.LookupIP(host) if err != nil { - log.Error().Caller().Err(err).Msgf("Failed to resolve DERP hostname %s to IP, using hostname", host) + log.Error().Caller().Err(err).Msgf("failed to resolve DERP hostname %s to IP, using hostname", host) } else if len(ips) > 0 { // Use the first IP address ipStr := ips[0].String() - log.Info().Caller().Msgf("HEADSCALE_DEBUG_DERP_USE_IP: Resolved %s to %s", host, ipStr) + log.Info().Caller().Msgf("HEADSCALE_DEBUG_DERP_USE_IP: resolved %s to %s", host, ipStr) host = ipStr } } @@ -136,8 +136,8 @@ func (d *DERPServer) GenerateRegion() (tailcfg.DERPRegion, error) { } localDERPregion.Nodes[0].STUNPort = portSTUN - log.Info().Caller().Msgf("DERP region: %+v", localDERPregion) - log.Info().Caller().Msgf("DERP Nodes[0]: %+v", localDERPregion.Nodes[0]) + log.Info().Caller().Msgf("derp region: %+v", localDERPregion) + log.Info().Caller().Msgf("derp nodes[0]: %+v", localDERPregion.Nodes[0]) return localDERPregion, nil } @@ -222,7 +222,7 @@ func (d *DERPServer) servePlain(writer http.ResponseWriter, req *http.Request) { hijacker, ok := writer.(http.Hijacker) if !ok { - log.Error().Caller().Msg("DERP requires Hijacker interface from Gin") + log.Error().Caller().Msg("derp requires Hijacker interface from Gin") writer.Header().Set("Content-Type", "text/plain") writer.WriteHeader(http.StatusInternalServerError) _, err := writer.Write([]byte("HTTP does not support general TCP support")) @@ -238,7 +238,7 @@ func (d *DERPServer) servePlain(writer http.ResponseWriter, req *http.Request) { netConn, conn, err := hijacker.Hijack() if err != nil { - log.Error().Caller().Err(err).Msgf("Hijack failed") + log.Error().Caller().Err(err).Msgf("hijack failed") writer.Header().Set("Content-Type", "text/plain") writer.WriteHeader(http.StatusInternalServerError) _, err = writer.Write([]byte("HTTP does not support general TCP support")) @@ -251,7 +251,8 @@ func (d *DERPServer) servePlain(writer http.ResponseWriter, req *http.Request) { return } - log.Trace().Caller().Msgf("Hijacked connection from %v", req.RemoteAddr) + + log.Trace().Caller().Msgf("hijacked connection from %v", req.RemoteAddr) if !fastStart { pubKey := d.key.Public() @@ -342,11 +343,12 @@ func (d *DERPServer) ServeSTUN() { if err != nil { log.Fatal().Msgf("failed to open STUN listener: %v", err) } - log.Info().Msgf("STUN server started at %s", packetConn.LocalAddr()) + + log.Info().Msgf("stun server started at %s", packetConn.LocalAddr()) udpConn, ok := packetConn.(*net.UDPConn) if !ok { - log.Fatal().Msg("STUN listener is not a UDP listener") + log.Fatal().Msg("stun listener is not a UDP listener") } serverSTUNListener(context.Background(), udpConn) } @@ -364,7 +366,8 @@ func serverSTUNListener(ctx context.Context, packetConn *net.UDPConn) { if ctx.Err() != nil { return } - log.Error().Caller().Err(err).Msgf("STUN ReadFrom") + + log.Error().Caller().Err(err).Msgf("stun ReadFrom") // Rate limit error logging - wait before retrying, but respect context cancellation select { @@ -375,16 +378,17 @@ func serverSTUNListener(ctx context.Context, packetConn *net.UDPConn) { continue } - log.Trace().Caller().Msgf("STUN request from %v", udpAddr) + + log.Trace().Caller().Msgf("stun request from %v", udpAddr) pkt := buf[:bytesRead] if !stun.Is(pkt) { - log.Trace().Caller().Msgf("UDP packet is not STUN") + log.Trace().Caller().Msgf("udp packet is not stun") continue } txid, err := stun.ParseBindingRequest(pkt) if err != nil { - log.Trace().Caller().Err(err).Msgf("STUN parse error") + log.Trace().Caller().Err(err).Msgf("stun parse error") continue } @@ -393,7 +397,7 @@ func serverSTUNListener(ctx context.Context, packetConn *net.UDPConn) { res := stun.Response(txid, netip.AddrPortFrom(addr, uint16(udpAddr.Port))) _, err = packetConn.WriteTo(res, udpAddr) if err != nil { - log.Trace().Caller().Err(err).Msgf("Issue writing to UDP") + log.Trace().Caller().Err(err).Msgf("issue writing to UDP") continue } @@ -413,7 +417,7 @@ type DERPVerifyTransport struct { func (t *DERPVerifyTransport) RoundTrip(req *http.Request) (*http.Response, error) { buf := new(bytes.Buffer) if err := t.handleVerifyRequest(req, buf); err != nil { - log.Error().Caller().Err(err).Msg("Failed to handle client verify request: ") + log.Error().Caller().Err(err).Msg("failed to handle client verify request") return nil, err } diff --git a/hscontrol/grpcv1.go b/hscontrol/grpcv1.go index 75156a1b..f31eceeb 100644 --- a/hscontrol/grpcv1.go +++ b/hscontrol/grpcv1.go @@ -236,7 +236,7 @@ func (api headscaleV1APIServer) RegisterNode( // Generate ephemeral registration key for tracking this registration flow in logs registrationKey, err := util.GenerateRegistrationKey() if err != nil { - log.Warn().Err(err).Msg("Failed to generate registration key") + log.Warn().Err(err).Msg("failed to generate registration key") registrationKey = "" // Continue without key if generation fails } @@ -546,7 +546,7 @@ func (api headscaleV1APIServer) BackfillNodeIPs( ctx context.Context, request *v1.BackfillNodeIPsRequest, ) (*v1.BackfillNodeIPsResponse, error) { - log.Trace().Caller().Msg("Backfill called") + log.Trace().Caller().Msg("backfill called") if !request.Confirmed { return nil, errors.New("not confirmed, aborting") @@ -823,7 +823,7 @@ func (api headscaleV1APIServer) Health( } if healthErr != nil { - log.Error().Err(healthErr).Msg("Health check failed") + log.Error().Err(healthErr).Msg("health check failed") } return response, healthErr diff --git a/hscontrol/mapper/batcher_lockfree.go b/hscontrol/mapper/batcher_lockfree.go index 88b5c4f2..ea195c0c 100644 --- a/hscontrol/mapper/batcher_lockfree.go +++ b/hscontrol/mapper/batcher_lockfree.go @@ -119,14 +119,14 @@ func (b *LockFreeBatcher) RemoveNode(id types.NodeID, c chan<- *tailcfg.MapRespo nodeConn, exists := b.nodes.Load(id) if !exists { - nlog.Debug().Caller().Msg("RemoveNode called for non-existent node") + nlog.Debug().Caller().Msg("removeNode called for non-existent node") return false } // Remove specific connection removed := nodeConn.removeConnectionByChannel(c) if !removed { - nlog.Debug().Caller().Msg("RemoveNode: channel not found, connection already removed or invalid") + nlog.Debug().Caller().Msg("removeNode: channel not found, connection already removed or invalid") return false } diff --git a/hscontrol/mapper/mapper.go b/hscontrol/mapper/mapper.go index a3b932d6..47d222b4 100644 --- a/hscontrol/mapper/mapper.go +++ b/hscontrol/mapper/mapper.go @@ -328,7 +328,7 @@ func writeDebugMapResponse( fmt.Sprintf("%s-%s.json", now, t), ) - log.Trace().Msgf("Writing MapResponse to %s", mapResponsePath) + log.Trace().Msgf("writing MapResponse to %s", mapResponsePath) err = os.WriteFile(mapResponsePath, body, perms) if err != nil { panic(err) @@ -357,7 +357,7 @@ func ReadMapResponsesFromDirectory(dir string) (map[types.NodeID][]tailcfg.MapRe nodeIDu, err := strconv.ParseUint(node.Name(), 10, 64) if err != nil { - log.Error().Err(err).Msgf("Parsing node ID from dir %s", node.Name()) + log.Error().Err(err).Msgf("parsing node ID from dir %s", node.Name()) continue } @@ -365,7 +365,7 @@ func ReadMapResponsesFromDirectory(dir string) (map[types.NodeID][]tailcfg.MapRe files, err := os.ReadDir(path.Join(dir, node.Name())) if err != nil { - log.Error().Err(err).Msgf("Reading dir %s", node.Name()) + log.Error().Err(err).Msgf("reading dir %s", node.Name()) continue } @@ -380,14 +380,14 @@ func ReadMapResponsesFromDirectory(dir string) (map[types.NodeID][]tailcfg.MapRe body, err := os.ReadFile(path.Join(dir, node.Name(), file.Name())) if err != nil { - log.Error().Err(err).Msgf("Reading file %s", file.Name()) + log.Error().Err(err).Msgf("reading file %s", file.Name()) continue } var resp tailcfg.MapResponse err = json.Unmarshal(body, &resp) if err != nil { - log.Error().Err(err).Msgf("Unmarshalling file %s", file.Name()) + log.Error().Err(err).Msgf("unmarshalling file %s", file.Name()) continue } diff --git a/hscontrol/noise.go b/hscontrol/noise.go index ad6bca53..8578c918 100644 --- a/hscontrol/noise.go +++ b/hscontrol/noise.go @@ -51,7 +51,7 @@ func (h *Headscale) NoiseUpgradeHandler( writer http.ResponseWriter, req *http.Request, ) { - log.Trace().Caller().Msgf("Noise upgrade handler for client %s", req.RemoteAddr) + log.Trace().Caller().Msgf("noise upgrade handler for client %s", req.RemoteAddr) upgrade := req.Header.Get("Upgrade") if upgrade == "" { @@ -60,7 +60,7 @@ func (h *Headscale) NoiseUpgradeHandler( // be passed to Headscale. Let's give them a hint. log.Warn(). Caller(). - Msg("No Upgrade header in TS2021 request. If headscale is behind a reverse proxy, make sure it is configured to pass WebSockets through.") + Msg("no upgrade header in TS2021 request. If headscale is behind a reverse proxy, make sure it is configured to pass WebSockets through.") http.Error(writer, "Internal error", http.StatusInternalServerError) return @@ -279,7 +279,7 @@ func (ns *noiseServer) NoiseRegistrationHandler( writer.WriteHeader(http.StatusOK) if err := json.NewEncoder(writer).Encode(registerResponse); err != nil { - log.Error().Caller().Err(err).Msg("NoiseRegistrationHandler: failed to encode RegisterResponse") + log.Error().Caller().Err(err).Msg("noise registration handler: failed to encode RegisterResponse") return } diff --git a/hscontrol/oidc.go b/hscontrol/oidc.go index 7013b8ed..1d71dcef 100644 --- a/hscontrol/oidc.go +++ b/hscontrol/oidc.go @@ -169,7 +169,7 @@ func (a *AuthProviderOIDC) RegisterHandler( a.registrationCache.Set(state, registrationInfo) authURL := a.oauth2Config.AuthCodeURL(state, extras...) - log.Debug().Caller().Msgf("Redirecting to %s for authentication", authURL) + log.Debug().Caller().Msgf("redirecting to %s for authentication", authURL) http.Redirect(writer, req, authURL, http.StatusFound) } diff --git a/hscontrol/policy/v2/filter.go b/hscontrol/policy/v2/filter.go index 71540ea8..7a7c6629 100644 --- a/hscontrol/policy/v2/filter.go +++ b/hscontrol/policy/v2/filter.go @@ -351,7 +351,7 @@ func (pol *Policy) compileSSHPolicy( // Resolve sources once - we'll use them differently for each destination type srcIPs, err := rule.Sources.Resolve(pol, users, nodes) if err != nil { - log.Trace().Caller().Err(err).Msgf("SSH policy compilation failed resolving source ips for rule %+v", rule) + log.Trace().Caller().Err(err).Msgf("ssh policy compilation failed resolving source ips for rule %+v", rule) } if srcIPs == nil || len(srcIPs.Prefixes()) == 0 { diff --git a/hscontrol/poll.go b/hscontrol/poll.go index 81a96154..8d729df5 100644 --- a/hscontrol/poll.go +++ b/hscontrol/poll.go @@ -308,7 +308,7 @@ func (m *mapSession) writeMap(msg *tailcfg.MapResponse) error { if f, ok := m.w.(http.Flusher); ok { f.Flush() } else { - m.log.Error().Caller().Msg("ResponseWriter does not implement http.Flusher, cannot flush") + m.log.Error().Caller().Msg("responseWriter does not implement http.Flusher, cannot flush") } } diff --git a/hscontrol/state/state.go b/hscontrol/state/state.go index 0d91a24a..1521f792 100644 --- a/hscontrol/state/state.go +++ b/hscontrol/state/state.go @@ -280,7 +280,7 @@ func (s *State) CreateUser(user types.User) (*types.User, change.Change, error) c = change.PolicyChange() } - log.Info().Str(zf.UserName, user.Name).Msg("User created") + log.Info().Str(zf.UserName, user.Name).Msg("user created") return &user, c, nil } @@ -487,7 +487,7 @@ func (s *State) Connect(id types.NodeID) []change.Change { c := []change.Change{change.NodeOnlineFor(node)} - log.Info().EmbedObject(node).Msg("Node connected") + log.Info().EmbedObject(node).Msg("node connected") // Use the node's current routes for primary route update // AllApprovedRoutes() returns only the intersection of announced AND approved routes @@ -515,7 +515,7 @@ func (s *State) Disconnect(id types.NodeID) ([]change.Change, error) { return nil, fmt.Errorf("node not found: %d", id) } - log.Info().EmbedObject(node).Msg("Node disconnected") + log.Info().EmbedObject(node).Msg("node disconnected") // Special error handling for disconnect - we log errors but continue // because NodeStore is already updated and we need to notify peers @@ -523,7 +523,7 @@ func (s *State) Disconnect(id types.NodeID) ([]change.Change, error) { if err != nil { // Log error but don't fail the disconnection - NodeStore is already updated // and we need to send change notifications to peers - log.Error().Err(err).EmbedObject(node).Msg("Failed to update last seen in database") + log.Error().Err(err).EmbedObject(node).Msg("failed to update last seen in database") c = change.Change{} } @@ -905,7 +905,7 @@ func (s *State) AutoApproveRoutes(nv types.NodeView) (change.Change, error) { return change.Change{}, err } - log.Info().EmbedObject(nv).Strs(zf.RoutesApproved, util.PrefixesToString(approved)).Msg("Routes approved") + log.Info().EmbedObject(nv).Strs(zf.RoutesApproved, util.PrefixesToString(approved)).Msg("routes approved") return c, nil } @@ -1441,7 +1441,7 @@ func (s *State) processReauthTags( Strs(zf.CurrentTags, node.Tags). Bool(zf.IsTagged, node.IsTagged()). Bool(zf.WasAuthKeyTagged, wasAuthKeyTagged) - logEvent.Msg("Processing RequestTags during reauth") + logEvent.Msg("processing RequestTags during reauth") // Empty RequestTags means untag node (transition to user-owned) if len(requestTags) == 0 { @@ -1952,14 +1952,14 @@ func (s *State) updatePolicyManagerUsers() (change.Change, error) { return change.Change{}, fmt.Errorf("listing users for policy update: %w", err) } - log.Debug().Caller().Int("user.count", len(users)).Msg("Policy manager user update initiated because user list modification detected") + log.Debug().Caller().Int("user.count", len(users)).Msg("policy manager user update initiated because user list modification detected") changed, err := s.polMan.SetUsers(users) if err != nil { return change.Change{}, fmt.Errorf("updating policy manager users: %w", err) } - log.Debug().Caller().Bool("policy.changed", changed).Msg("Policy manager user update completed because SetUsers operation finished") + log.Debug().Caller().Bool("policy.changed", changed).Msg("policy manager user update completed because SetUsers operation finished") if changed { return change.PolicyChange(), nil diff --git a/hscontrol/types/config.go b/hscontrol/types/config.go index 4068d72e..4b0cd240 100644 --- a/hscontrol/types/config.go +++ b/hscontrol/types/config.go @@ -403,7 +403,7 @@ func LoadConfig(path string, isFile bool) error { if err := viper.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { - log.Warn().Msg("No config file found, using defaults") + log.Warn().Msg("no config file found, using defaults") return nil } @@ -450,7 +450,7 @@ func validateServerConfig() error { depr.Log() if viper.IsSet("dns.extra_records") && viper.IsSet("dns.extra_records_path") { - log.Fatal().Msg("Fatal config error: dns.extra_records and dns.extra_records_path are mutually exclusive. Please remove one of them from your config file") + log.Fatal().Msg("fatal config error: dns.extra_records and dns.extra_records_path are mutually exclusive. Please remove one of them from your config file") } // Collect any validation errors and return them all at once diff --git a/hscontrol/types/users.go b/hscontrol/types/users.go index d2522d34..3ce2235e 100644 --- a/hscontrol/types/users.go +++ b/hscontrol/types/users.go @@ -392,7 +392,7 @@ func (u *User) FromClaim(claims *OIDCClaims, emailVerifiedRequired bool) { if err == nil { u.Name = claims.Username } else { - log.Debug().Caller().Err(err).Msgf("Username %s is not valid", claims.Username) + log.Debug().Caller().Err(err).Msgf("username %s is not valid", claims.Username) } if claims.EmailVerified || !FlexibleBoolean(emailVerifiedRequired) {