1
0
Fork 0
mirror of https://github.com/sourcegraph/jsonrpc2.git synced 2026-07-03 15:53:41 +02:00

Merge pull request #31 from s3rj1k/logger

use custom logger for internal logging
This commit is contained in:
Quinn Slack 2019-11-03 21:31:32 -08:00 committed by GitHub
commit 9d396041a5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 14 deletions

View file

@ -29,7 +29,7 @@ func OnSend(f func(*Request, *Response)) ConnOpt {
// LogMessages causes all messages sent and received on conn to be // LogMessages causes all messages sent and received on conn to be
// logged using the provided logger. // logged using the provided logger.
func LogMessages(log Logger) ConnOpt { func LogMessages(logger Logger) ConnOpt {
return func(c *Conn) { return func(c *Conn) {
// Remember reqs we have received so we can helpfully show the // Remember reqs we have received so we can helpfully show the
// request method in OnSend for responses. // request method in OnSend for responses.
@ -38,6 +38,9 @@ func LogMessages(log Logger) ConnOpt {
reqMethods = map[ID]string{} reqMethods = map[ID]string{}
) )
// Set custom logger from provided input
c.logger = logger
OnRecv(func(req *Request, resp *Response) { OnRecv(func(req *Request, resp *Response) {
switch { switch {
case req != nil && resp == nil: case req != nil && resp == nil:
@ -47,9 +50,9 @@ func LogMessages(log Logger) ConnOpt {
params, _ := json.Marshal(req.Params) params, _ := json.Marshal(req.Params)
if req.Notif { if req.Notif {
log.Printf("--> notif: %s: %s", req.Method, params) logger.Printf("jsonrpc2: --> notif: %s: %s\n", req.Method, params)
} else { } else {
log.Printf("--> request #%s: %s: %s", req.ID, req.Method, params) logger.Printf("jsonrpc2: --> request #%s: %s: %s\n", req.ID, req.Method, params)
} }
case resp != nil: case resp != nil:
@ -62,10 +65,10 @@ func LogMessages(log Logger) ConnOpt {
switch { switch {
case resp.Result != nil: case resp.Result != nil:
result, _ := json.Marshal(resp.Result) result, _ := json.Marshal(resp.Result)
log.Printf("--> result #%s: %s: %s", resp.ID, method, result) logger.Printf("jsonrpc2: --> result #%s: %s: %s\n", resp.ID, method, result)
case resp.Error != nil: case resp.Error != nil:
err, _ := json.Marshal(resp.Error) err, _ := json.Marshal(resp.Error)
log.Printf("--> error #%s: %s: %s", resp.ID, method, err) logger.Printf("jsonrpc2: --> error #%s: %s: %s\n", resp.ID, method, err)
} }
} }
})(c) })(c)
@ -74,9 +77,9 @@ func LogMessages(log Logger) ConnOpt {
case req != nil: case req != nil:
params, _ := json.Marshal(req.Params) params, _ := json.Marshal(req.Params)
if req.Notif { if req.Notif {
log.Printf("<-- notif: %s: %s", req.Method, params) logger.Printf("jsonrpc2: <-- notif: %s: %s\n", req.Method, params)
} else { } else {
log.Printf("<-- request #%s: %s: %s", req.ID, req.Method, params) logger.Printf("jsonrpc2: <-- request #%s: %s: %s\n", req.ID, req.Method, params)
} }
case resp != nil: case resp != nil:
@ -90,10 +93,10 @@ func LogMessages(log Logger) ConnOpt {
if resp.Result != nil { if resp.Result != nil {
result, _ := json.Marshal(resp.Result) result, _ := json.Marshal(resp.Result)
log.Printf("<-- result #%s: %s: %s", resp.ID, method, result) logger.Printf("jsonrpc2: <-- result #%s: %s: %s\n", resp.ID, method, result)
} else { } else {
err, _ := json.Marshal(resp.Error) err, _ := json.Marshal(resp.Error)
log.Printf("<-- error #%s: %s: %s", resp.ID, method, err) logger.Printf("jsonrpc2: <-- error #%s: %s: %s\n", resp.ID, method, err)
} }
} }
})(c) })(c)

View file

@ -2,7 +2,6 @@ package jsonrpc2
import ( import (
"context" "context"
"log"
) )
// HandlerWithError implements Handler by calling the func for each // HandlerWithError implements Handler by calling the func for each
@ -22,7 +21,7 @@ func (h *HandlerWithErrorConfigurer) Handle(ctx context.Context, conn *Conn, req
result, err := h.handleFunc(ctx, conn, req) result, err := h.handleFunc(ctx, conn, req)
if req.Notif { if req.Notif {
if err != nil { if err != nil {
log.Printf("jsonrpc2 handler: notification %q handling error: %s", req.Method, err) conn.logger.Printf("jsonrpc2 handler: notification %q handling error: %s\n", req.Method, err)
} }
return return
} }
@ -42,7 +41,7 @@ func (h *HandlerWithErrorConfigurer) Handle(ctx context.Context, conn *Conn, req
if !req.Notif { if !req.Notif {
if err := conn.SendResponse(ctx, resp); err != nil { if err := conn.SendResponse(ctx, resp); err != nil {
if err != ErrClosed || !h.suppressErrClosed { if err != ErrClosed || !h.suppressErrClosed {
log.Printf("jsonrpc2 handler: sending response %s: %s", resp.ID, err) conn.logger.Printf("jsonrpc2 handler: sending response %s: %s\n", resp.ID, err)
} }
} }
} }

View file

@ -10,6 +10,7 @@ import (
"fmt" "fmt"
"io" "io"
"log" "log"
"os"
"strconv" "strconv"
"sync" "sync"
) )
@ -296,6 +297,8 @@ type Conn struct {
disconnect chan struct{} disconnect chan struct{}
logger Logger
// Set by ConnOpt funcs. // Set by ConnOpt funcs.
onRecv []func(*Request, *Response) onRecv []func(*Request, *Response)
onSend []func(*Request, *Response) onSend []func(*Request, *Response)
@ -320,6 +323,7 @@ func NewConn(ctx context.Context, stream ObjectStream, h Handler, opts ...ConnOp
h: h, h: h,
pending: map[ID]*call{}, pending: map[ID]*call{},
disconnect: make(chan struct{}), disconnect: make(chan struct{}),
logger: log.New(os.Stderr, "", log.LstdFlags),
} }
for _, opt := range opts { for _, opt := range opts {
if opt == nil { if opt == nil {
@ -542,7 +546,7 @@ func (c *Conn) readMessages(ctx context.Context) {
switch { switch {
case call == nil: case call == nil:
log.Printf("jsonrpc2: ignoring response #%s with no corresponding request", id) c.logger.Printf("jsonrpc2: ignoring response #%s with no corresponding request\n", id)
case resp.Error != nil: case resp.Error != nil:
call.done <- resp.Error call.done <- resp.Error
@ -574,7 +578,7 @@ func (c *Conn) readMessages(ctx context.Context) {
c.mu.Unlock() c.mu.Unlock()
c.sending.Unlock() c.sending.Unlock()
if err != io.ErrUnexpectedEOF && !closing { if err != io.ErrUnexpectedEOF && !closing {
log.Println("jsonrpc2: protocol error:", err) c.logger.Printf("jsonrpc2: protocol error: %v\n", err)
} }
close(c.disconnect) close(c.disconnect)
} }