diff --git a/server/git/example.go b/server/git/example.go
index c261604..1bea27c 100644
--- a/server/git/example.go
+++ b/server/git/example.go
@@ -2,39 +2,43 @@
 
 import (
 	"context"
-	"fmt"
-	"log"
+	"log/slog"
+	"os"
 )
 
 // Example demonstrates how to use the Git interface
 func Example() {
 	ctx := context.Background()
 
+	// Create logger
+	logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
+
 	// Create a new Git instance
 	git := DefaultGit("/path/to/your/repo")
 
 	// Get repository status
 	status, err := git.Status(ctx)
 	if err != nil {
-		log.Fatalf("Failed to get status: %v", err)
+		logger.Error("Failed to get status", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
-	fmt.Printf("Current branch: %s\n", status.Branch)
-	fmt.Printf("Repository is clean: %t\n", status.IsClean)
+	logger.Info("Repository status", slog.String("branch", status.Branch), slog.Bool("clean", status.IsClean))
 
 	// List branches
 	branches, err := git.ListBranches(ctx)
 	if err != nil {
-		log.Fatalf("Failed to list branches: %v", err)
+		logger.Error("Failed to list branches", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
-	fmt.Println("Branches:")
+	logger.Info("Branches found", slog.Int("count", len(branches)))
 	for _, branch := range branches {
 		current := ""
 		if branch.IsCurrent {
 			current = " (current)"
 		}
-		fmt.Printf("  %s%s\n", branch.Name, current)
+		logger.Info("Branch", slog.String("name", branch.Name+current))
 	}
 
 	// Get recent commits
@@ -45,12 +49,13 @@
 
 	commits, err := git.Log(ctx, logOptions)
 	if err != nil {
-		log.Fatalf("Failed to get log: %v", err)
+		logger.Error("Failed to get log", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
-	fmt.Println("Recent commits:")
+	logger.Info("Recent commits", slog.Int("count", len(commits)))
 	for _, commit := range commits {
-		fmt.Printf("  %s: %s\n", commit.Hash[:8], commit.Message)
+		logger.Info("Commit", slog.String("hash", commit.Hash[:8]), slog.String("message", commit.Message))
 	}
 }
 
@@ -58,12 +63,16 @@
 func ExampleWorkflow() {
 	ctx := context.Background()
 
+	// Create logger
+	logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
+
 	// Initialize a new repository
 	git := DefaultGit("/path/to/new/repo")
 
 	// Initialize the repository
 	if err := git.Init(ctx, "/path/to/new/repo"); err != nil {
-		log.Fatalf("Failed to initialize repository: %v", err)
+		logger.Error("Failed to initialize repository", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Set user configuration
@@ -73,7 +82,8 @@
 	}
 
 	if err := git.SetUserConfig(ctx, userConfig); err != nil {
-		log.Fatalf("Failed to set user config: %v", err)
+		logger.Error("Failed to set user config", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Create a new file and add it
@@ -81,7 +91,8 @@
 
 	// Stage all changes
 	if err := git.AddAll(ctx); err != nil {
-		log.Fatalf("Failed to add files: %v", err)
+		logger.Error("Failed to add files", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Commit the changes
@@ -90,42 +101,50 @@
 	}
 
 	if err := git.Commit(ctx, "Initial commit", commitOptions); err != nil {
-		log.Fatalf("Failed to commit: %v", err)
+		logger.Error("Failed to commit", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Create a new branch
 	if err := git.CreateBranch(ctx, "feature/new-feature", ""); err != nil {
-		log.Fatalf("Failed to create branch: %v", err)
+		logger.Error("Failed to create branch", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Switch to the new branch
 	if err := git.Checkout(ctx, "feature/new-feature"); err != nil {
-		log.Fatalf("Failed to checkout branch: %v", err)
+		logger.Error("Failed to checkout branch", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
-	fmt.Println("Repository initialized and feature branch created!")
+	logger.Info("Repository initialized and feature branch created!")
 }
 
 // ExampleRemoteOperations demonstrates remote repository operations
 func ExampleRemoteOperations() {
 	ctx := context.Background()
 
+	// Create logger
+	logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo}))
+
 	git := DefaultGit("/path/to/your/repo")
 
 	// Add a remote
 	if err := git.AddRemote(ctx, "origin", "https://github.com/user/repo.git"); err != nil {
-		log.Fatalf("Failed to add remote: %v", err)
+		logger.Error("Failed to add remote", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// List remotes
 	remotes, err := git.ListRemotes(ctx)
 	if err != nil {
-		log.Fatalf("Failed to list remotes: %v", err)
+		logger.Error("Failed to list remotes", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
-	fmt.Println("Remotes:")
+	logger.Info("Remotes found", slog.Int("count", len(remotes)))
 	for _, remote := range remotes {
-		fmt.Printf("  %s: %s\n", remote.Name, remote.URL)
+		logger.Info("Remote", slog.String("name", remote.Name), slog.String("url", remote.URL))
 	}
 
 	// Fetch from remote
@@ -135,7 +154,8 @@
 	}
 
 	if err := git.Fetch(ctx, "", fetchOptions); err != nil {
-		log.Fatalf("Failed to fetch: %v", err)
+		logger.Error("Failed to fetch", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 
 	// Push to remote
@@ -144,6 +164,7 @@
 	}
 
 	if err := git.Push(ctx, "origin", "main", pushOptions); err != nil {
-		log.Fatalf("Failed to push: %v", err)
+		logger.Error("Failed to push", slog.String("error", err.Error()))
+		os.Exit(1)
 	}
 }
