diff --git a/internal/lsp/cache/cache.go b/internal/lsp/cache/cache.go
index ed2468f..298be2d 100644
--- a/internal/lsp/cache/cache.go
+++ b/internal/lsp/cache/cache.go
@@ -14,7 +14,6 @@
 
 	"golang.org/x/tools/internal/lsp/debug"
 	"golang.org/x/tools/internal/lsp/source"
-	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/memoize"
 	"golang.org/x/tools/internal/span"
 )
@@ -77,7 +76,6 @@
 	s := &session{
 		cache:         c,
 		id:            strconv.FormatInt(index, 10),
-		log:           xlog.From(ctx),
 		overlays:      make(map[span.URI]*overlay),
 		filesWatchMap: NewWatchMap(),
 	}
diff --git a/internal/lsp/cache/session.go b/internal/lsp/cache/session.go
index 0104287..d746c34 100644
--- a/internal/lsp/cache/session.go
+++ b/internal/lsp/cache/session.go
@@ -24,8 +24,6 @@
 type session struct {
 	cache *cache
 	id    string
-	// the logger to use to communicate back with the client
-	log xlog.Logger
 
 	viewMu  sync.Mutex
 	views   []*view
@@ -179,10 +177,6 @@
 	return fmt.Errorf("view %s for %v not found", view.Name(), view.Folder())
 }
 
-func (s *session) Logger() xlog.Logger {
-	return s.log
-}
-
 // TODO: Propagate the language ID through to the view.
 func (s *session) DidOpen(ctx context.Context, uri span.URI, _ source.FileKind, text []byte) {
 	// Mark the file as open.
diff --git a/internal/lsp/protocol/protocol.go b/internal/lsp/protocol/protocol.go
index ff16c8a..731f8bc 100644
--- a/internal/lsp/protocol/protocol.go
+++ b/internal/lsp/protocol/protocol.go
@@ -19,13 +19,11 @@
 
 type clientHandler struct {
 	canceller
-	log    xlog.Logger
 	client Client
 }
 
 type serverHandler struct {
 	canceller
-	log    xlog.Logger
 	server Server
 }
 
@@ -43,7 +41,7 @@
 func NewClient(ctx context.Context, stream jsonrpc2.Stream, client Client) (context.Context, *jsonrpc2.Conn, Server) {
 	ctx = xlog.With(ctx, NewLogger(client))
 	conn := jsonrpc2.NewConn(stream)
-	conn.AddHandler(&clientHandler{log: xlog.From(ctx), client: client})
+	conn.AddHandler(&clientHandler{client: client})
 	return ctx, conn, &serverDispatcher{Conn: conn}
 }
 
@@ -51,11 +49,11 @@
 	conn := jsonrpc2.NewConn(stream)
 	client := &clientDispatcher{Conn: conn}
 	ctx = xlog.With(ctx, NewLogger(client))
-	conn.AddHandler(&serverHandler{log: xlog.From(ctx), server: server})
+	conn.AddHandler(&serverHandler{server: server})
 	return ctx, conn, client
 }
 
-func sendParseError(ctx context.Context, log xlog.Logger, req *jsonrpc2.Request, err error) {
+func sendParseError(ctx context.Context, req *jsonrpc2.Request, err error) {
 	if _, ok := err.(*jsonrpc2.Error); !ok {
 		err = jsonrpc2.NewErrorf(jsonrpc2.CodeParseError, "%v", err)
 	}
diff --git a/internal/lsp/protocol/tsclient.go b/internal/lsp/protocol/tsclient.go
index 6d096a8..d5b4b01 100644
--- a/internal/lsp/protocol/tsclient.go
+++ b/internal/lsp/protocol/tsclient.go
@@ -7,6 +7,7 @@
 	"encoding/json"
 
 	"golang.org/x/tools/internal/jsonrpc2"
+	"golang.org/x/tools/internal/lsp/xlog"
 )
 
 type Client interface {
@@ -30,7 +31,7 @@
 	case "$/cancelRequest":
 		var params CancelParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		r.Conn().Cancel(params.ID)
@@ -38,41 +39,41 @@
 	case "window/showMessage": // notif
 		var params ShowMessageParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.client.ShowMessage(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "window/logMessage": // notif
 		var params LogMessageParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.client.LogMessage(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "telemetry/event": // notif
 		var params interface{}
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.client.Event(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/publishDiagnostics": // notif
 		var params PublishDiagnosticsParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.client.PublishDiagnostics(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/workspaceFolders": // req
@@ -82,62 +83,62 @@
 		}
 		resp, err := h.client.WorkspaceFolders(ctx)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/configuration": // req
 		var params ConfigurationParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.client.Configuration(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "client/registerCapability": // req
 		var params RegistrationParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		err := h.client.RegisterCapability(ctx, &params)
 		if err := r.Reply(ctx, nil, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "client/unregisterCapability": // req
 		var params UnregistrationParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		err := h.client.UnregisterCapability(ctx, &params)
 		if err := r.Reply(ctx, nil, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "window/showMessageRequest": // req
 		var params ShowMessageRequestParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.client.ShowMessageRequest(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/applyEdit": // req
 		var params ApplyWorkspaceEditParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.client.ApplyEdit(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 
diff --git a/internal/lsp/protocol/tsserver.go b/internal/lsp/protocol/tsserver.go
index fb5d2d4c..0d254da 100644
--- a/internal/lsp/protocol/tsserver.go
+++ b/internal/lsp/protocol/tsserver.go
@@ -7,6 +7,7 @@
 	"encoding/json"
 
 	"golang.org/x/tools/internal/jsonrpc2"
+	"golang.org/x/tools/internal/lsp/xlog"
 )
 
 type Server interface {
@@ -62,7 +63,7 @@
 	case "$/cancelRequest":
 		var params CancelParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		r.Conn().Cancel(params.ID)
@@ -70,204 +71,204 @@
 	case "workspace/didChangeWorkspaceFolders": // notif
 		var params DidChangeWorkspaceFoldersParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidChangeWorkspaceFolders(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "initialized": // notif
 		var params InitializedParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.Initialized(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "exit": // notif
 		if err := h.server.Exit(ctx); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/didChangeConfiguration": // notif
 		var params DidChangeConfigurationParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidChangeConfiguration(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/didOpen": // notif
 		var params DidOpenTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidOpen(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/didChange": // notif
 		var params DidChangeTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidChange(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/didClose": // notif
 		var params DidCloseTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidClose(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/didSave": // notif
 		var params DidSaveTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidSave(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/willSave": // notif
 		var params WillSaveTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.WillSave(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/didChangeWatchedFiles": // notif
 		var params DidChangeWatchedFilesParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.DidChangeWatchedFiles(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "$/setTraceNotification": // notif
 		var params SetTraceParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.SetTraceNotification(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "$/logTraceNotification": // notif
 		var params LogTraceParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		if err := h.server.LogTraceNotification(ctx, &params); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/implementation": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Implementation(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/typeDefinition": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.TypeDefinition(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/documentColor": // req
 		var params DocumentColorParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.DocumentColor(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/colorPresentation": // req
 		var params ColorPresentationParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.ColorPresentation(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/foldingRange": // req
 		var params FoldingRangeParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.FoldingRange(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/declaration": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Declaration(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/selectionRange": // req
 		var params SelectionRangeParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.SelectionRange(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "initialize": // req
 		var params InitializeParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Initialize(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "shutdown": // req
@@ -277,238 +278,238 @@
 		}
 		err := h.server.Shutdown(ctx)
 		if err := r.Reply(ctx, nil, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/willSaveWaitUntil": // req
 		var params WillSaveTextDocumentParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.WillSaveWaitUntil(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/completion": // req
 		var params CompletionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Completion(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "completionItem/resolve": // req
 		var params CompletionItem
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Resolve(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/hover": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Hover(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/signatureHelp": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.SignatureHelp(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/definition": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Definition(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/references": // req
 		var params ReferenceParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.References(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/documentHighlight": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.DocumentHighlight(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/documentSymbol": // req
 		var params DocumentSymbolParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.DocumentSymbol(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/symbol": // req
 		var params WorkspaceSymbolParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Symbol(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/codeAction": // req
 		var params CodeActionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.CodeAction(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/codeLens": // req
 		var params CodeLensParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.CodeLens(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "codeLens/resolve": // req
 		var params CodeLens
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.ResolveCodeLens(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/formatting": // req
 		var params DocumentFormattingParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Formatting(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/rangeFormatting": // req
 		var params DocumentRangeFormattingParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.RangeFormatting(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/onTypeFormatting": // req
 		var params DocumentOnTypeFormattingParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.OnTypeFormatting(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/rename": // req
 		var params RenameParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.Rename(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/prepareRename": // req
 		var params TextDocumentPositionParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.PrepareRename(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "textDocument/documentLink": // req
 		var params DocumentLinkParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.DocumentLink(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "documentLink/resolve": // req
 		var params DocumentLink
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.ResolveDocumentLink(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 	case "workspace/executeCommand": // req
 		var params ExecuteCommandParams
 		if err := json.Unmarshal(*r.Params, &params); err != nil {
-			sendParseError(ctx, h.log, r, err)
+			sendParseError(ctx, r, err)
 			return true
 		}
 		resp, err := h.server.ExecuteCommand(ctx, &params)
 		if err := r.Reply(ctx, resp, err); err != nil {
-			h.log.Errorf(ctx, "%v", err)
+			xlog.Errorf(ctx, "%v", err)
 		}
 		return true
 
diff --git a/internal/lsp/protocol/typescript/requests.ts b/internal/lsp/protocol/typescript/requests.ts
index 3390290..409faa8 100644
--- a/internal/lsp/protocol/typescript/requests.ts
+++ b/internal/lsp/protocol/typescript/requests.ts
@@ -113,16 +113,16 @@
   if (a != '') {
     case1 = `var params ${a}
     if err := json.Unmarshal(*r.Params, &params); err != nil {
-      sendParseError(ctx, h.log, r, err)
+      sendParseError(ctx, r, err)
       return true
     }
     if err := h.${side.name}.${nm}(ctx, &params); err != nil {
-      h.log.Errorf(ctx, "%v", err)
+      xlog.Errorf(ctx, "%v", err)
     }
     return true`;
   } else {
     case1 = `if err := h.${side.name}.${nm}(ctx); err != nil {
-      h.log.Errorf(ctx, "%v", err)
+      xlog.Errorf(ctx, "%v", err)
     }
     return true`;
   }
@@ -154,24 +154,24 @@
   if (a != '') {
     case1 = `var params ${a}
     if err := json.Unmarshal(*r.Params, &params); err != nil {
-      sendParseError(ctx, h.log, r, err)
+      sendParseError(ctx, r, err)
       return true
     }`;
   }
   const arg2 = a == '' ? '' : ', &params';
   let case2 = `if err := h.${side.name}.${nm}(ctx${arg2}); err != nil {
-    h.log.Errorf(ctx, "%v", err)
+    xlog.Errorf(ctx, "%v", err)
   }`;
   if (b != '') {
     case2 = `resp, err := h.${side.name}.${nm}(ctx${arg2})
     if err := r.Reply(ctx, resp, err); err != nil {
-      h.log.Errorf(ctx, "%v", err)
+      xlog.Errorf(ctx, "%v", err)
     }
     return true`;
   } else {  // response is nil
     case2 = `err := h.${side.name}.${nm}(ctx${arg2})
     if err := r.Reply(ctx, nil, err); err != nil {
-      h.log.Errorf(ctx, "%v", err)
+      xlog.Errorf(ctx, "%v", err)
     }
     return true`
   }
@@ -226,6 +226,7 @@
     "encoding/json"
 
     "golang.org/x/tools/internal/jsonrpc2"
+    "golang.org/x/tools/internal/lsp/xlog"
   )
   `);
   const a = side.name[0].toUpperCase() + side.name.substring(1)
@@ -240,7 +241,7 @@
       case "$/cancelRequest":
         var params CancelParams
         if err := json.Unmarshal(*r.Params, &params); err != nil {
-          sendParseError(ctx, h.log, r, err)
+          sendParseError(ctx, r, err)
           return true
         }
         r.Conn().Cancel(params.ID)
diff --git a/internal/lsp/source/view.go b/internal/lsp/source/view.go
index f40553d..bc0ad76 100644
--- a/internal/lsp/source/view.go
+++ b/internal/lsp/source/view.go
@@ -14,7 +14,6 @@
 	"golang.org/x/tools/go/analysis"
 	"golang.org/x/tools/go/packages"
 	"golang.org/x/tools/internal/lsp/diff"
-	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -134,9 +133,6 @@
 	// Cache returns the cache that created this session.
 	Cache() Cache
 
-	// Returns the logger in use for this session.
-	Logger() xlog.Logger
-
 	// View returns a view with a mathing name, if the session has one.
 	View(name string) View
 
diff --git a/internal/lsp/xlog/xlog.go b/internal/lsp/xlog/xlog.go
index 6d9fc36..9a6c753 100644
--- a/internal/lsp/xlog/xlog.go
+++ b/internal/lsp/xlog/xlog.go
@@ -10,9 +10,9 @@
 	"log"
 )
 
-// Logger is a wrapper over a sink to provide a clean API over the core log
+// logger is a wrapper over a sink to provide a clean API over the core log
 // function.
-type Logger struct {
+type logger struct {
 	sink Sink
 }
 
@@ -37,18 +37,18 @@
 
 // Errorf is intended for the logging of errors that we could not easily return
 // to the client but that caused problems internally.
-func (l Logger) Errorf(ctx context.Context, format string, args ...interface{}) {
+func (l logger) Errorf(ctx context.Context, format string, args ...interface{}) {
 	l.sink.Log(ctx, ErrorLevel, fmt.Sprintf(format, args...))
 }
 
 // Infof is intended for logging of messages that may help the user understand
 // the behavior or be useful in a bug report.
-func (l Logger) Infof(ctx context.Context, format string, args ...interface{}) {
+func (l logger) Infof(ctx context.Context, format string, args ...interface{}) {
 	l.sink.Log(ctx, InfoLevel, fmt.Sprintf(format, args...))
 }
 
 // Debugf is intended to be used only while debugging.
-func (l Logger) Debugf(ctx context.Context, format string, args ...interface{}) {
+func (l logger) Debugf(ctx context.Context, format string, args ...interface{}) {
 	l.sink.Log(ctx, DebugLevel, fmt.Sprintf(format, args...))
 }
 
@@ -73,8 +73,8 @@
 	return context.WithValue(ctx, contextKey, sink)
 }
 
-func From(ctx context.Context) Logger {
-	return Logger{sink: ctx.Value(contextKey).(Sink)}
+func From(ctx context.Context) logger {
+	return logger{sink: ctx.Value(contextKey).(Sink)}
 }
 
 func Errorf(ctx context.Context, format string, args ...interface{}) {
