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:
commit
9d396041a5
3 changed files with 20 additions and 14 deletions
21
conn_opt.go
21
conn_opt.go
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue