Browse code

Carry 34248 Added tag log option to json-logger and use RawAttrs

This fix carries PR 34248: Added tag log option to json-logger

This fix changes to use RawAttrs based on review feedback.

This fix fixes 19803, this fix closes 34248.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>

Yong Tang authored on 2018/01/08 09:54:58
Showing 6 changed files
... ...
@@ -62,17 +62,21 @@ func New(info logger.Info) (logger.Logger, error) {
62 62
 		}
63 63
 	}
64 64
 
65
-	// no default template. only use a tag if the user asked for it
66
-	tag, err := loggerutils.ParseLogTag(info, "")
65
+	attrs, err := info.ExtraAttributes(nil)
67 66
 	if err != nil {
68 67
 		return nil, err
69 68
 	}
70 69
 
71
-	var extra []byte
72
-	attrs, err := info.ExtraAttributes(nil)
70
+	// no default template. only use a tag if the user asked for it
71
+	tag, err := loggerutils.ParseLogTag(info, "")
73 72
 	if err != nil {
74 73
 		return nil, err
75 74
 	}
75
+	if tag != "" {
76
+		attrs["tag"] = tag
77
+	}
78
+
79
+	var extra []byte
76 80
 	if len(attrs) > 0 {
77 81
 		var err error
78 82
 		extra, err = json.Marshal(attrs)
... ...
@@ -83,7 +87,7 @@ func New(info logger.Info) (logger.Logger, error) {
83 83
 
84 84
 	buf := bytes.NewBuffer(nil)
85 85
 	marshalFunc := func(msg *logger.Message) ([]byte, error) {
86
-		if err := marshalMessage(msg, extra, buf, tag); err != nil {
86
+		if err := marshalMessage(msg, extra, buf); err != nil {
87 87
 			return nil, err
88 88
 		}
89 89
 		b := buf.Bytes()
... ...
@@ -111,7 +115,7 @@ func (l *JSONFileLogger) Log(msg *logger.Message) error {
111 111
 	return err
112 112
 }
113 113
 
114
-func marshalMessage(msg *logger.Message, extra json.RawMessage, buf *bytes.Buffer, tag string) error {
114
+func marshalMessage(msg *logger.Message, extra json.RawMessage, buf *bytes.Buffer) error {
115 115
 	logLine := msg.Line
116 116
 	if !msg.Partial {
117 117
 		logLine = append(msg.Line, '\n')
... ...
@@ -121,7 +125,6 @@ func marshalMessage(msg *logger.Message, extra json.RawMessage, buf *bytes.Buffe
121 121
 		Stream:   msg.Source,
122 122
 		Created:  msg.Timestamp,
123 123
 		RawAttrs: extra,
124
-		Tag:      tag,
125 124
 	}).MarshalJSONBuf(buf)
126 125
 	if err != nil {
127 126
 		return errors.Wrap(err, "error writing log message to buffer")
... ...
@@ -14,6 +14,7 @@ import (
14 14
 	"github.com/docker/docker/daemon/logger"
15 15
 	"github.com/docker/docker/daemon/logger/jsonfilelog/jsonlog"
16 16
 	"github.com/gotestyourself/gotestyourself/fs"
17
+	"github.com/stretchr/testify/assert"
17 18
 	"github.com/stretchr/testify/require"
18 19
 )
19 20
 
... ...
@@ -90,14 +91,11 @@ func TestJSONFileLoggerWithTags(t *testing.T) {
90 90
 	res, err := ioutil.ReadFile(filename)
91 91
 	require.NoError(t, err)
92 92
 
93
-	expected := `{"log":"line1\n","stream":"src1","tag":"a7317399f3f8/test-container","time":"0001-01-01T00:00:00Z"}
94
-{"log":"line2\n","stream":"src2","tag":"a7317399f3f8/test-container","time":"0001-01-01T00:00:00Z"}
95
-{"log":"line3\n","stream":"src3","tag":"a7317399f3f8/test-container","time":"0001-01-01T00:00:00Z"}
93
+	expected := `{"log":"line1\n","stream":"src1","attrs":{"tag":"a7317399f3f8/test-container"},"time":"0001-01-01T00:00:00Z"}
94
+{"log":"line2\n","stream":"src2","attrs":{"tag":"a7317399f3f8/test-container"},"time":"0001-01-01T00:00:00Z"}
95
+{"log":"line3\n","stream":"src3","attrs":{"tag":"a7317399f3f8/test-container"},"time":"0001-01-01T00:00:00Z"}
96 96
 `
97
-
98
-	if string(res) != expected {
99
-		t.Fatalf("Wrong log content: %q, expected %q", res, expected)
100
-	}
97
+	assert.Equal(t, expected, string(res))
101 98
 }
102 99
 
103 100
 func BenchmarkJSONFileLoggerLog(b *testing.B) {
... ...
@@ -125,7 +123,7 @@ func BenchmarkJSONFileLoggerLog(b *testing.B) {
125 125
 	}
126 126
 
127 127
 	buf := bytes.NewBuffer(nil)
128
-	require.NoError(b, marshalMessage(msg, nil, buf, ""))
128
+	require.NoError(b, marshalMessage(msg, nil, buf))
129 129
 	b.SetBytes(int64(buf.Len()))
130 130
 
131 131
 	b.ResetTimer()
... ...
@@ -14,8 +14,6 @@ type JSONLog struct {
14 14
 	Created time.Time `json:"time"`
15 15
 	// Attrs is the list of extra attributes provided by the user
16 16
 	Attrs map[string]string `json:"attrs,omitempty"`
17
-	// Tags requested the operator
18
-	Tag string `json:"tag,omitempty"`
19 17
 }
20 18
 
21 19
 // Reset all fields to their zero value.
... ...
@@ -24,5 +22,4 @@ func (jl *JSONLog) Reset() {
24 24
 	jl.Stream = ""
25 25
 	jl.Created = time.Time{}
26 26
 	jl.Attrs = make(map[string]string)
27
-	jl.Tag = ""
28 27
 }
... ...
@@ -12,7 +12,6 @@ type JSONLogs struct {
12 12
 	Log     []byte    `json:"log,omitempty"`
13 13
 	Stream  string    `json:"stream,omitempty"`
14 14
 	Created time.Time `json:"time"`
15
-	Tag     string    `json:"tag,omitempty"`
16 15
 
17 16
 	// json-encoded bytes
18 17
 	RawAttrs json.RawMessage `json:"attrs,omitempty"`
... ...
@@ -38,15 +37,6 @@ func (mj *JSONLogs) MarshalJSONBuf(buf *bytes.Buffer) error {
38 38
 		buf.WriteString(`"stream":`)
39 39
 		ffjsonWriteJSONBytesAsString(buf, []byte(mj.Stream))
40 40
 	}
41
-	if len(mj.Tag) > 0 {
42
-		if first {
43
-			first = false
44
-		} else {
45
-			buf.WriteString(`,`)
46
-		}
47
-		buf.WriteString(`"tag":`)
48
-		ffjsonWriteJSONBytesAsString(buf, []byte(mj.Tag))
49
-	}
50 41
 	if len(mj.RawAttrs) > 0 {
51 42
 		if first {
52 43
 			first = false
... ...
@@ -30,7 +30,7 @@ func TestJSONLogsMarshalJSONBuf(t *testing.T) {
30 30
 		// with raw attributes
31 31
 		{Log: []byte("A log line"), RawAttrs: []byte(`{"hello":"world","value":1234}`)}: `^{\"log\":\"A log line\",\"attrs\":{\"hello\":\"world\",\"value\":1234},\"time\":`,
32 32
 		// with Tag set
33
-		{Log: []byte("A log line with tag"), Tag: "test-tag"}: `^{\"log\":\"A log line with tag\",\"tag\":\"test-tag\",\"time\":`,
33
+		{Log: []byte("A log line with tag"), RawAttrs: []byte(`{"hello":"world","value":1234}`)}: `^{\"log\":\"A log line with tag\",\"attrs\":{\"hello\":\"world\",\"value\":1234},\"time\":`,
34 34
 	}
35 35
 	for jsonLog, expression := range logs {
36 36
 		var buf bytes.Buffer
... ...
@@ -35,7 +35,7 @@ func BenchmarkJSONFileLoggerReadLogs(b *testing.B) {
35 35
 	}
36 36
 
37 37
 	buf := bytes.NewBuffer(nil)
38
-	require.NoError(b, marshalMessage(msg, nil, buf, ""))
38
+	require.NoError(b, marshalMessage(msg, nil, buf))
39 39
 	b.SetBytes(int64(buf.Len()))
40 40
 
41 41
 	b.ResetTimer()