cmd/golsp: make each log message result from a single call to fmt.Fprintf
If several RPCs finish together the existing code may mix the log messages, making reading them difficult. Change-Id: I1de15373f739c97ccfaf210511b5f5443f7ef036 Reviewed-on: https://go-review.googlesource.com/c/154346 Reviewed-by: Rebecca Stambler <rstambler@golang.org>
This commit is contained in:
parent
3c39ce7b61
commit
728ed46ae0
|
@ -20,6 +20,7 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"runtime/pprof"
|
"runtime/pprof"
|
||||||
"runtime/trace"
|
"runtime/trace"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/tools/internal/jsonrpc2"
|
"golang.org/x/tools/internal/jsonrpc2"
|
||||||
|
@ -108,43 +109,47 @@ func main() {
|
||||||
jsonrpc2.NewHeaderStream(os.Stdin, os.Stdout),
|
jsonrpc2.NewHeaderStream(os.Stdin, os.Stdout),
|
||||||
func(direction jsonrpc2.Direction, id *jsonrpc2.ID, elapsed time.Duration, method string, payload *json.RawMessage, err *jsonrpc2.Error) {
|
func(direction jsonrpc2.Direction, id *jsonrpc2.ID, elapsed time.Duration, method string, payload *json.RawMessage, err *jsonrpc2.Error) {
|
||||||
|
|
||||||
|
const eol = "\r\n\r\n\r\n"
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(out, "[Error - %v] %s %s%s %v", time.Now().Format("3:04:05 PM"), direction, method, id, err)
|
fmt.Fprintf(out, "[Error - %v] %s %s%s %v%s", time.Now().Format("3:04:05 PM"),
|
||||||
|
direction, method, id, err, eol)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "[Trace - %v] ", time.Now().Format("3:04:05 PM"))
|
outx := new(strings.Builder)
|
||||||
|
fmt.Fprintf(outx, "[Trace - %v] ", time.Now().Format("3:04:05 PM"))
|
||||||
switch direction {
|
switch direction {
|
||||||
case jsonrpc2.Send:
|
case jsonrpc2.Send:
|
||||||
fmt.Fprint(out, "Received ")
|
fmt.Fprint(outx, "Received ")
|
||||||
case jsonrpc2.Receive:
|
case jsonrpc2.Receive:
|
||||||
fmt.Fprint(out, "Sending ")
|
fmt.Fprint(outx, "Sending ")
|
||||||
}
|
}
|
||||||
switch {
|
switch {
|
||||||
case id == nil:
|
case id == nil:
|
||||||
fmt.Fprint(out, "notification ")
|
fmt.Fprint(outx, "notification ")
|
||||||
case elapsed >= 0:
|
case elapsed >= 0:
|
||||||
fmt.Fprint(out, "response ")
|
fmt.Fprint(outx, "response ")
|
||||||
default:
|
default:
|
||||||
fmt.Fprint(out, "request ")
|
fmt.Fprint(outx, "request ")
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, "'%s", method)
|
fmt.Fprintf(outx, "'%s", method)
|
||||||
switch {
|
switch {
|
||||||
case id == nil:
|
case id == nil:
|
||||||
// do nothing
|
// do nothing
|
||||||
case id.Name != "":
|
case id.Name != "":
|
||||||
fmt.Fprintf(out, " - (%s)", id.Name)
|
fmt.Fprintf(outx, " - (%s)", id.Name)
|
||||||
default:
|
default:
|
||||||
fmt.Fprintf(out, " - (%d)", id.Number)
|
fmt.Fprintf(outx, " - (%d)", id.Number)
|
||||||
}
|
}
|
||||||
fmt.Fprint(out, "'")
|
fmt.Fprint(outx, "'")
|
||||||
if elapsed >= 0 {
|
if elapsed >= 0 {
|
||||||
fmt.Fprintf(out, " in %vms", elapsed.Nanoseconds()/1000)
|
fmt.Fprintf(outx, " in %vms", elapsed.Nanoseconds()/1000)
|
||||||
}
|
}
|
||||||
params := string(*payload)
|
params := string(*payload)
|
||||||
if params == "null" {
|
if params == "null" {
|
||||||
params = "{}"
|
params = "{}"
|
||||||
}
|
}
|
||||||
fmt.Fprintf(out, ".\r\nParams: %s\r\n\r\n\r\n", params)
|
fmt.Fprintf(outx, ".\r\nParams: %s%s", params, eol)
|
||||||
|
fmt.Fprintf(out, "%s", outx.String())
|
||||||
},
|
},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
Loading…
Reference in New Issue