diff --git a/internal/lsp/cache/gofile.go b/internal/lsp/cache/gofile.go
index 9155040..03750ba 100644
--- a/internal/lsp/cache/gofile.go
+++ b/internal/lsp/cache/gofile.go
@@ -11,6 +11,7 @@
 	"sync"
 
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -52,7 +53,7 @@
 
 	if f.isDirty() || f.astIsTrimmed() {
 		if _, err := f.view.loadParseTypecheck(ctx, f); err != nil {
-			f.View().Session().Logger().Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
 			return nil
 		}
 	}
@@ -71,7 +72,7 @@
 
 	if f.isDirty() {
 		if _, err := f.view.loadParseTypecheck(ctx, f); err != nil {
-			f.View().Session().Logger().Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
 			return nil
 		}
 	}
@@ -91,7 +92,7 @@
 
 	if f.isDirty() || f.astIsTrimmed() {
 		if _, err := f.view.loadParseTypecheck(ctx, f); err != nil {
-			f.View().Session().Logger().Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
 			return nil
 		}
 	}
@@ -110,7 +111,7 @@
 
 	if f.isDirty() || f.astIsTrimmed() {
 		if errs, err := f.view.loadParseTypecheck(ctx, f); err != nil {
-			f.View().Session().Logger().Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "unable to check package for %s: %v", f.URI(), err)
 
 			// Create diagnostics for errors if we are able to.
 			if len(errs) > 0 {
@@ -151,12 +152,12 @@
 func unexpectedAST(ctx context.Context, f *goFile) bool {
 	// If the AST comes back nil, something has gone wrong.
 	if f.ast == nil {
-		f.View().Session().Logger().Errorf(ctx, "expected full AST for %s, returned nil", f.URI())
+		xlog.Errorf(ctx, "expected full AST for %s, returned nil", f.URI())
 		return true
 	}
 	// If the AST comes back trimmed, something has gone wrong.
 	if f.ast.isTrimmed {
-		f.View().Session().Logger().Errorf(ctx, "expected full AST for %s, returned trimmed", f.URI())
+		xlog.Errorf(ctx, "expected full AST for %s, returned trimmed", f.URI())
 		return true
 	}
 	return false
diff --git a/internal/lsp/cache/load.go b/internal/lsp/cache/load.go
index ed483b1..f0e4bbb 100644
--- a/internal/lsp/cache/load.go
+++ b/internal/lsp/cache/load.go
@@ -10,6 +10,7 @@
 
 	"golang.org/x/tools/go/packages"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -224,11 +225,11 @@
 	for _, filename := range m.files {
 		f, err := v.getFile(ctx, span.FileURI(filename))
 		if err != nil {
-			v.session.log.Errorf(ctx, "no file %s: %v", filename, err)
+			xlog.Errorf(ctx, "no file %s: %v", filename, err)
 		}
 		gof, ok := f.(*goFile)
 		if !ok {
-			v.session.log.Errorf(ctx, "not a Go file: %s", f.URI())
+			xlog.Errorf(ctx, "not a Go file: %s", f.URI())
 		}
 		if gof.meta == nil {
 			gof.meta = make(map[packageID]*metadata)
@@ -252,7 +253,7 @@
 		}
 		if _, ok := m.children[packageID(importPkg.ID)]; !ok {
 			if err := v.link(ctx, importPkgPath, importPkg, m, missingImports); err != nil {
-				v.session.log.Errorf(ctx, "error in dependency %s: %v", importPkgPath, err)
+				xlog.Errorf(ctx, "error in dependency %s: %v", importPkgPath, err)
 			}
 		}
 	}
diff --git a/internal/lsp/cache/session.go b/internal/lsp/cache/session.go
index 4775a9b..0104287 100644
--- a/internal/lsp/cache/session.go
+++ b/internal/lsp/cache/session.go
@@ -199,12 +199,12 @@
 		if strings.HasPrefix(string(uri), string(view.Folder())) {
 			f, err := view.GetFile(ctx, uri)
 			if err != nil {
-				s.log.Errorf(ctx, "error getting file for %s", uri)
+				xlog.Errorf(ctx, "error getting file for %s", uri)
 				return
 			}
 			gof, ok := f.(*goFile)
 			if !ok {
-				s.log.Errorf(ctx, "%s is not a Go file", uri)
+				xlog.Errorf(ctx, "%s is not a Go file", uri)
 				return
 			}
 			// Mark file as open.
@@ -276,7 +276,7 @@
 	}
 	_, hash, err := s.cache.GetFile(uri).Read(ctx)
 	if err != nil {
-		s.log.Errorf(ctx, "failed to read %s: %v", uri, err)
+		xlog.Errorf(ctx, "failed to read %s: %v", uri, err)
 		return
 	}
 	if hash == s.overlays[uri].hash {
diff --git a/internal/lsp/cache/view.go b/internal/lsp/cache/view.go
index 326cf5c..f4922ce 100644
--- a/internal/lsp/cache/view.go
+++ b/internal/lsp/cache/view.go
@@ -17,6 +17,7 @@
 	"golang.org/x/tools/go/packages"
 	"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/span"
 )
 
@@ -277,12 +278,12 @@
 	for _, filename := range m.files {
 		f, err := v.findFile(span.FileURI(filename))
 		if err != nil {
-			v.session.log.Errorf(ctx, "cannot find file %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "cannot find file %s: %v", f.URI(), err)
 			continue
 		}
 		gof, ok := f.(*goFile)
 		if !ok {
-			v.session.log.Errorf(ctx, "non-Go file %v", f.URI())
+			xlog.Errorf(ctx, "non-Go file %v", f.URI())
 			continue
 		}
 		gof.mu.Lock()
diff --git a/internal/lsp/code_action.go b/internal/lsp/code_action.go
index e1b0643..ca0862e 100644
--- a/internal/lsp/code_action.go
+++ b/internal/lsp/code_action.go
@@ -11,6 +11,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -57,7 +58,7 @@
 		if s.wantSuggestedFixes {
 			qf, err := quickFixes(ctx, view, gof)
 			if err != nil {
-				view.Session().Logger().Errorf(ctx, "quick fixes failed for %s: %v", uri, err)
+				xlog.Errorf(ctx, "quick fixes failed for %s: %v", uri, err)
 			}
 			codeActions = append(codeActions, qf...)
 		}
diff --git a/internal/lsp/completion.go b/internal/lsp/completion.go
index d1103ff..ac7705d 100644
--- a/internal/lsp/completion.go
+++ b/internal/lsp/completion.go
@@ -12,6 +12,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -35,7 +36,7 @@
 		WantDocumentaton: s.wantCompletionDocumentation,
 	})
 	if err != nil {
-		s.session.Logger().Infof(ctx, "no completions found for %s:%v:%v: %v", uri, int(params.Position.Line), int(params.Position.Character), err)
+		xlog.Infof(ctx, "no completions found for %s:%v:%v: %v", uri, int(params.Position.Line), int(params.Position.Character), err)
 	}
 	return &protocol.CompletionList{
 		IsIncomplete: false,
@@ -62,11 +63,11 @@
 		prefix = strings.ToLower(surrounding.Prefix())
 		spn, err := surrounding.Range.Span()
 		if err != nil {
-			s.session.Logger().Infof(ctx, "failed to get span for surrounding position: %s:%v:%v: %v", m.URI, int(pos.Line), int(pos.Character), err)
+			xlog.Infof(ctx, "failed to get span for surrounding position: %s:%v:%v: %v", m.URI, int(pos.Line), int(pos.Character), err)
 		} else {
 			rng, err := m.Range(spn)
 			if err != nil {
-				s.session.Logger().Infof(ctx, "failed to convert surrounding position: %s:%v:%v: %v", m.URI, int(pos.Line), int(pos.Character), err)
+				xlog.Infof(ctx, "failed to convert surrounding position: %s:%v:%v: %v", m.URI, int(pos.Line), int(pos.Character), err)
 			} else {
 				insertionRange = rng
 			}
diff --git a/internal/lsp/diagnostics.go b/internal/lsp/diagnostics.go
index c9bf489..b7fd90d 100644
--- a/internal/lsp/diagnostics.go
+++ b/internal/lsp/diagnostics.go
@@ -10,13 +10,14 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
 func (s *Server) Diagnostics(ctx context.Context, view source.View, uri span.URI) {
 	f, err := view.GetFile(ctx, uri)
 	if err != nil {
-		s.session.Logger().Errorf(ctx, "no file for %s: %v", uri, err)
+		xlog.Errorf(ctx, "no file for %s: %v", uri, err)
 		return
 	}
 	// For non-Go files, don't return any diagnostics.
@@ -26,7 +27,7 @@
 	}
 	reports, err := source.Diagnostics(ctx, view, gof, s.disabledAnalyses)
 	if err != nil {
-		s.session.Logger().Errorf(ctx, "failed to compute diagnostics for %s: %v", gof.URI(), err)
+		xlog.Errorf(ctx, "failed to compute diagnostics for %s: %v", gof.URI(), err)
 		return
 	}
 
@@ -38,7 +39,7 @@
 			if s.undelivered == nil {
 				s.undelivered = make(map[span.URI][]source.Diagnostic)
 			}
-			s.session.Logger().Errorf(ctx, "failed to deliver diagnostic for %s (will retry): %v", uri, err)
+			xlog.Errorf(ctx, "failed to deliver diagnostic for %s (will retry): %v", uri, err)
 			s.undelivered[uri] = diagnostics
 			continue
 		}
@@ -49,7 +50,7 @@
 	// undelivered ones (only for remaining URIs).
 	for uri, diagnostics := range s.undelivered {
 		if err := s.publishDiagnostics(ctx, view, uri, diagnostics); err != nil {
-			s.session.Logger().Errorf(ctx, "failed to deliver diagnostic for %s (will not retry): %v", uri, err)
+			xlog.Errorf(ctx, "failed to deliver diagnostic for %s (will not retry): %v", uri, err)
 		}
 		// If we fail to deliver the same diagnostics twice, just give up.
 		delete(s.undelivered, uri)
diff --git a/internal/lsp/general.go b/internal/lsp/general.go
index 65ba6ea..12adb19 100644
--- a/internal/lsp/general.go
+++ b/internal/lsp/general.go
@@ -15,6 +15,7 @@
 	"golang.org/x/tools/internal/lsp/debug"
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -154,7 +155,7 @@
 	}
 	buf := &bytes.Buffer{}
 	debug.PrintVersionInfo(buf, true, debug.PlainText)
-	s.session.Logger().Infof(ctx, "%s", buf)
+	xlog.Infof(ctx, "%s", buf)
 	return nil
 }
 
@@ -209,7 +210,7 @@
 		case "FullDocumentation":
 			s.hoverKind = source.FullDocumentation
 		default:
-			view.Session().Logger().Errorf(ctx, "unsupported hover kind %s", hoverKind)
+			xlog.Errorf(ctx, "unsupported hover kind %s", hoverKind)
 			// The default value is already be set to synopsis.
 		}
 	}
diff --git a/internal/lsp/highlight.go b/internal/lsp/highlight.go
index 2bfd3d7..ade399a 100644
--- a/internal/lsp/highlight.go
+++ b/internal/lsp/highlight.go
@@ -9,6 +9,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -29,7 +30,7 @@
 	}
 	spans, err := source.Highlight(ctx, f, rng.Start)
 	if err != nil {
-		view.Session().Logger().Errorf(ctx, "no highlight for %s: %v", spn, err)
+		xlog.Errorf(ctx, "no highlight for %s: %v", spn, err)
 	}
 	return toProtocolHighlight(m, spans), nil
 }
diff --git a/internal/lsp/link.go b/internal/lsp/link.go
index 96c8470..121ff5ca 100644
--- a/internal/lsp/link.go
+++ b/internal/lsp/link.go
@@ -15,6 +15,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -37,13 +38,13 @@
 		case *ast.ImportSpec:
 			target, err := strconv.Unquote(n.Path.Value)
 			if err != nil {
-				view.Session().Logger().Errorf(ctx, "cannot unquote import path %s: %v", n.Path.Value, err)
+				xlog.Errorf(ctx, "cannot unquote import path %s: %v", n.Path.Value, err)
 				return false
 			}
 			target = "https://godoc.org/" + target
 			l, err := toProtocolLink(view, m, target, n.Pos(), n.End())
 			if err != nil {
-				view.Session().Logger().Errorf(ctx, "cannot initialize DocumentLink %s: %v", n.Path.Value, err)
+				xlog.Errorf(ctx, "cannot initialize DocumentLink %s: %v", n.Path.Value, err)
 				return false
 			}
 			links = append(links, l)
@@ -54,7 +55,7 @@
 			}
 			l, err := findLinksInString(n.Value, n.Pos(), view, m)
 			if err != nil {
-				view.Session().Logger().Errorf(ctx, "cannot find links in string: %v", err)
+				xlog.Errorf(ctx, "cannot find links in string: %v", err)
 				return false
 			}
 			links = append(links, l...)
@@ -67,7 +68,7 @@
 		for _, comment := range commentGroup.List {
 			l, err := findLinksInString(comment.Text, comment.Pos(), view, m)
 			if err != nil {
-				view.Session().Logger().Errorf(ctx, "cannot find links in comment: %v", err)
+				xlog.Errorf(ctx, "cannot find links in comment: %v", err)
 				continue
 			}
 			links = append(links, l...)
diff --git a/internal/lsp/protocol/protocol.go b/internal/lsp/protocol/protocol.go
index 254b2f9..ff16c8a 100644
--- a/internal/lsp/protocol/protocol.go
+++ b/internal/lsp/protocol/protocol.go
@@ -60,6 +60,6 @@
 		err = jsonrpc2.NewErrorf(jsonrpc2.CodeParseError, "%v", err)
 	}
 	if err := req.Reply(ctx, nil, err); err != nil {
-		log.Errorf(ctx, "%v", err)
+		xlog.Errorf(ctx, "%v", err)
 	}
 }
diff --git a/internal/lsp/references.go b/internal/lsp/references.go
index a6506a5..430dc3c 100644
--- a/internal/lsp/references.go
+++ b/internal/lsp/references.go
@@ -9,6 +9,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -34,7 +35,7 @@
 	}
 	references, err := ident.References(ctx)
 	if err != nil {
-		view.Session().Logger().Errorf(ctx, "no references for %s: %v", ident.Name, err)
+		xlog.Errorf(ctx, "no references for %s: %v", ident.Name, err)
 	}
 	if params.Context.IncludeDeclaration {
 		// The declaration of this identifier may not be in the
diff --git a/internal/lsp/signature_help.go b/internal/lsp/signature_help.go
index 85d7eea..1fa7b04 100644
--- a/internal/lsp/signature_help.go
+++ b/internal/lsp/signature_help.go
@@ -9,6 +9,7 @@
 
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -29,7 +30,7 @@
 	}
 	info, err := source.SignatureHelp(ctx, f, rng.Start)
 	if err != nil {
-		s.session.Logger().Infof(ctx, "no signature help for %s:%v:%v : %s", uri, int(params.Position.Line), int(params.Position.Character), err)
+		xlog.Infof(ctx, "no signature help for %s:%v:%v : %s", uri, int(params.Position.Line), int(params.Position.Character), err)
 		return nil, nil
 	}
 	return toProtocolSignatureHelp(info), nil
diff --git a/internal/lsp/source/completion_format.go b/internal/lsp/source/completion_format.go
index 1b77142..de1f4f4 100644
--- a/internal/lsp/source/completion_format.go
+++ b/internal/lsp/source/completion_format.go
@@ -14,6 +14,7 @@
 	"strings"
 
 	"golang.org/x/tools/internal/lsp/snippet"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -192,7 +193,7 @@
 		cfg := printer.Config{Mode: printer.UseSpaces | printer.TabIndent, Tabwidth: 4}
 		b := &bytes.Buffer{}
 		if err := cfg.Fprint(b, v.Session().Cache().FileSet(), p.Type); err != nil {
-			v.Session().Logger().Errorf(ctx, "unable to print type %v", p.Type)
+			xlog.Errorf(ctx, "unable to print type %v", p.Type)
 			continue
 		}
 		typ := replacer.Replace(b.String())
diff --git a/internal/lsp/source/diagnostics.go b/internal/lsp/source/diagnostics.go
index 1137fb2..268b99f 100644
--- a/internal/lsp/source/diagnostics.go
+++ b/internal/lsp/source/diagnostics.go
@@ -34,6 +34,7 @@
 	"golang.org/x/tools/go/analysis/passes/unsafeptr"
 	"golang.org/x/tools/go/analysis/passes/unusedresult"
 	"golang.org/x/tools/go/packages"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -81,7 +82,7 @@
 	if !diagnostics(ctx, view, pkg, reports) {
 		// If we don't have any list, parse, or type errors, run analyses.
 		if err := analyses(ctx, view, pkg, disabledAnalyses, reports); err != nil {
-			view.Session().Logger().Errorf(ctx, "failed to run analyses for %s: %v", f.URI(), err)
+			xlog.Errorf(ctx, "failed to run analyses for %s: %v", f.URI(), err)
 		}
 	}
 	// Updates to the diagnostics for this package may need to be propagated.
@@ -230,29 +231,29 @@
 func pointToSpan(ctx context.Context, view View, spn span.Span) span.Span {
 	f, err := view.GetFile(ctx, spn.URI())
 	if err != nil {
-		view.Session().Logger().Errorf(ctx, "could not find file for diagnostic: %v", spn.URI())
+		xlog.Errorf(ctx, "could not find file for diagnostic: %v", spn.URI())
 		return spn
 	}
 	diagFile, ok := f.(GoFile)
 	if !ok {
-		view.Session().Logger().Errorf(ctx, "%s is not a Go file", spn.URI())
+		xlog.Errorf(ctx, "%s is not a Go file", spn.URI())
 		return spn
 	}
 	tok := diagFile.GetToken(ctx)
 	if tok == nil {
-		view.Session().Logger().Errorf(ctx, "could not find token.File for diagnostic: %v", spn.URI())
+		xlog.Errorf(ctx, "could not find token.File for diagnostic: %v", spn.URI())
 		return spn
 	}
 	data, _, err := diagFile.Handle(ctx).Read(ctx)
 	if err != nil {
-		view.Session().Logger().Errorf(ctx, "could not find content for diagnostic: %v", spn.URI())
+		xlog.Errorf(ctx, "could not find content for diagnostic: %v", spn.URI())
 		return spn
 	}
 	c := span.NewTokenConverter(diagFile.FileSet(), tok)
 	s, err := spn.WithOffset(c)
 	//we just don't bother producing an error if this failed
 	if err != nil {
-		view.Session().Logger().Errorf(ctx, "invalid span for diagnostic: %v: %v", spn.URI(), err)
+		xlog.Errorf(ctx, "invalid span for diagnostic: %v: %v", spn.URI(), err)
 		return spn
 	}
 	start := s.Start()
diff --git a/internal/lsp/source/format.go b/internal/lsp/source/format.go
index 9f6fcea..72f7ddb 100644
--- a/internal/lsp/source/format.go
+++ b/internal/lsp/source/format.go
@@ -17,6 +17,7 @@
 	"golang.org/x/tools/internal/imports"
 	"golang.org/x/tools/internal/lsp/diff"
 	"golang.org/x/tools/internal/lsp/telemetry/trace"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -106,7 +107,7 @@
 	env := &imports.ProcessEnv{
 		WorkingDir: cfg.Dir,
 		Logf: func(format string, v ...interface{}) {
-			view.Session().Logger().Infof(ctx, format, v...)
+			xlog.Infof(ctx, format, v...)
 		},
 	}
 	for _, kv := range cfg.Env {
@@ -137,7 +138,7 @@
 	defer done()
 	data, _, err := file.Handle(ctx).Read(ctx)
 	if err != nil {
-		file.View().Session().Logger().Errorf(ctx, "Cannot compute text edits: %v", err)
+		xlog.Errorf(ctx, "Cannot compute text edits: %v", err)
 		return nil
 	}
 	u := diff.SplitLines(string(data))
diff --git a/internal/lsp/text_synchronization.go b/internal/lsp/text_synchronization.go
index 0f3e023..fb7608d 100644
--- a/internal/lsp/text_synchronization.go
+++ b/internal/lsp/text_synchronization.go
@@ -13,6 +13,7 @@
 	"golang.org/x/tools/internal/lsp/protocol"
 	"golang.org/x/tools/internal/lsp/source"
 	"golang.org/x/tools/internal/lsp/telemetry/trace"
+	"golang.org/x/tools/internal/lsp/xlog"
 	"golang.org/x/tools/internal/span"
 )
 
@@ -133,7 +134,7 @@
 	defer func() {
 		for _, uri := range clear {
 			if err := s.publishDiagnostics(ctx, view, uri, []source.Diagnostic{}); err != nil {
-				s.session.Logger().Errorf(ctx, "failed to clear diagnostics for %s: %v", uri, err)
+				xlog.Errorf(ctx, "failed to clear diagnostics for %s: %v", uri, err)
 			}
 		}
 	}()
@@ -141,18 +142,18 @@
 	// clear out all diagnostics for the package.
 	f, err := view.GetFile(ctx, uri)
 	if err != nil {
-		s.session.Logger().Errorf(ctx, "no file for %s: %v", uri, err)
+		xlog.Errorf(ctx, "no file for %s: %v", uri, err)
 		return nil
 	}
 	// For non-Go files, don't return any diagnostics.
 	gof, ok := f.(source.GoFile)
 	if !ok {
-		s.session.Logger().Errorf(ctx, "closing a non-Go file, no diagnostics to clear")
+		xlog.Errorf(ctx, "closing a non-Go file, no diagnostics to clear")
 		return nil
 	}
 	pkg := gof.GetPackage(ctx)
 	if pkg == nil {
-		s.session.Logger().Errorf(ctx, "no package available for %s", uri)
+		xlog.Errorf(ctx, "no package available for %s", uri)
 		return nil
 	}
 	for _, filename := range pkg.GetFilenames() {
