| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package log is a context based logging package, designed to interact well |
| // with both the lsp protocol and the other telemetry packages. |
| package log |
| |
| import ( |
| "context" |
| "time" |
| |
| "golang.org/x/tools/internal/telemetry" |
| "golang.org/x/tools/internal/telemetry/export" |
| "golang.org/x/tools/internal/telemetry/tag" |
| ) |
| |
| type Event telemetry.Event |
| |
| // With sends a tag list to the installed loggers. |
| func With(ctx context.Context, tags ...telemetry.Tag) { |
| export.Log(ctx, telemetry.Event{ |
| At: time.Now(), |
| Tags: tags, |
| }) |
| } |
| |
| // Print takes a message and a tag list and combines them into a single tag |
| // list before delivering them to the loggers. |
| func Print(ctx context.Context, message string, tags ...tag.Tagger) { |
| export.Log(ctx, telemetry.Event{ |
| At: time.Now(), |
| Message: message, |
| Tags: tag.Tags(ctx, tags...), |
| }) |
| } |
| |
| // Error takes a message and a tag list and combines them into a single tag |
| // list before delivering them to the loggers. It captures the error in the |
| // delivered event. |
| func Error(ctx context.Context, message string, err error, tags ...tag.Tagger) { |
| if err == nil { |
| err = errorString(message) |
| message = "" |
| } |
| export.Log(ctx, telemetry.Event{ |
| At: time.Now(), |
| Message: message, |
| Error: err, |
| Tags: tag.Tags(ctx, tags...), |
| }) |
| } |
| |
| type errorString string |
| |
| // Error allows errorString to conform to the error interface. |
| func (err errorString) Error() string { return string(err) } |