Skip to content

Commit d2c9827

Browse files
clrprodjonjohnsonjr
authored andcommitted
registry: Add support for a custom logger (google#537)
* registry: Allow configuring the logger * Flip registry to use an option pattern. Also always used the log field rather than having a bypass function. * Run all tests in registry_test with a custom logger.
1 parent c88aae4 commit d2c9827

File tree

2 files changed

+43
-15
lines changed

2 files changed

+43
-15
lines changed

pkg/registry/registry.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,23 @@ package registry
2626
import (
2727
"log"
2828
"net/http"
29+
"os"
2930
)
3031

31-
type v struct {
32+
type registry struct {
33+
log *log.Logger
3234
blobs blobs
3335
manifests manifests
3436
}
3537

3638
// https://docs.docker.com/registry/spec/api/#api-version-check
3739
// https://github.com/opencontainers/distribution-spec/blob/master/spec.md#api-version-check
38-
func (v *v) v2(resp http.ResponseWriter, req *http.Request) *regError {
40+
func (r *registry) v2(resp http.ResponseWriter, req *http.Request) *regError {
3941
if isBlob(req) {
40-
return v.blobs.handle(resp, req)
42+
return r.blobs.handle(resp, req)
4143
}
4244
if isManifest(req) {
43-
return v.manifests.handle(resp, req)
45+
return r.manifests.handle(resp, req)
4446
}
4547
resp.Header().Set("Docker-Distribution-API-Version", "registry/2.0")
4648
if req.URL.Path != "/v2/" && req.URL.Path != "/v2" {
@@ -54,18 +56,20 @@ func (v *v) v2(resp http.ResponseWriter, req *http.Request) *regError {
5456
return nil
5557
}
5658

57-
func (v *v) root(resp http.ResponseWriter, req *http.Request) {
58-
if rerr := v.v2(resp, req); rerr != nil {
59-
log.Printf("%s %s %d %s %s", req.Method, req.URL, rerr.Status, rerr.Code, rerr.Message)
59+
func (r *registry) root(resp http.ResponseWriter, req *http.Request) {
60+
if rerr := r.v2(resp, req); rerr != nil {
61+
r.log.Printf("%s %s %d %s %s", req.Method, req.URL, rerr.Status, rerr.Code, rerr.Message)
6062
rerr.Write(resp)
6163
return
6264
}
63-
log.Printf("%s %s", req.Method, req.URL)
65+
r.log.Printf("%s %s", req.Method, req.URL)
6466
}
6567

66-
// New returns a handler which implements the docker registry protocol. It should be registered at the site root.
67-
func New() http.Handler {
68-
v := v{
68+
// New returns a handler which implements the docker registry protocol.
69+
// It should be registered at the site root.
70+
func New(opts ...Option) http.Handler {
71+
r := &registry{
72+
log: log.New(os.Stderr, "", log.LstdFlags),
6973
blobs: blobs{
7074
contents: map[string][]byte{},
7175
uploads: map[string][]byte{},
@@ -74,5 +78,18 @@ func New() http.Handler {
7478
manifests: map[string]map[string]manifest{},
7579
},
7680
}
77-
return http.HandlerFunc(v.root)
81+
for _, o := range opts {
82+
o(r)
83+
}
84+
return http.HandlerFunc(r.root)
85+
}
86+
87+
// Options describes the available options
88+
// for creating the registry.
89+
type Option func(r *registry)
90+
91+
func Logger(l *log.Logger) Option {
92+
return func(r *registry) {
93+
r.log = l
94+
}
7895
}

pkg/registry/registry_test.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"encoding/hex"
2020
"fmt"
2121
"io/ioutil"
22+
"log"
2223
"net/http"
2324
"net/http/httptest"
2425
"net/url"
@@ -304,8 +305,15 @@ func TestCalls(t *testing.T) {
304305
}
305306

306307
for _, tc := range tcs {
307-
t.Run(tc.Description, func(t *testing.T) {
308-
s := httptest.NewServer(registry.New())
308+
309+
var logger *log.Logger
310+
testf := func(t *testing.T) {
311+
312+
r := registry.New()
313+
if logger != nil {
314+
r = registry.New(registry.Logger(logger))
315+
}
316+
s := httptest.NewServer(r)
309317
defer s.Close()
310318

311319
for manifest, contents := range tc.Manifests {
@@ -394,6 +402,9 @@ func TestCalls(t *testing.T) {
394402
t.Errorf("Incorrect header %q received, got %q, want %q", k, r, v)
395403
}
396404
}
397-
})
405+
}
406+
t.Run(tc.Description, testf)
407+
logger = log.New(ioutil.Discard, "", log.Ldate)
408+
t.Run(tc.Description+" - custom log", testf)
398409
}
399410
}

0 commit comments

Comments
 (0)