Browse code

Rename 'context' to 'loginfo' in the logger module

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

gofmt

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

update

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

remove 'api/types/container/config.go' from this PR

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

change 'LogInfo' to 'Info'

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

update

Signed-off-by: Yanqiang Miao <miao.yanqiang@zte.com.cn>

Yanqiang Miao authored on 2016/11/26 14:08:34
Showing 19 changed files
... ...
@@ -328,7 +328,7 @@ func (container *Container) StartLogger() (logger.Logger, error) {
328 328
 	if err != nil {
329 329
 		return nil, fmt.Errorf("failed to get logging factory: %v", err)
330 330
 	}
331
-	ctx := logger.Context{
331
+	info := logger.Info{
332 332
 		Config:              cfg.Config,
333 333
 		ContainerID:         container.ID,
334 334
 		ContainerName:       container.Name,
... ...
@@ -344,12 +344,12 @@ func (container *Container) StartLogger() (logger.Logger, error) {
344 344
 
345 345
 	// Set logging file for "json-logger"
346 346
 	if cfg.Type == jsonfilelog.Name {
347
-		ctx.LogPath, err = container.GetRootResourcePath(fmt.Sprintf("%s-json.log", container.ID))
347
+		info.LogPath, err = container.GetRootResourcePath(fmt.Sprintf("%s-json.log", container.ID))
348 348
 		if err != nil {
349 349
 			return nil, err
350 350
 		}
351 351
 	}
352
-	return c(ctx)
352
+	return c(info)
353 353
 }
354 354
 
355 355
 // GetProcessLabel returns the process label for the container.
... ...
@@ -88,17 +88,17 @@ func init() {
88 88
 // also taken from environment variables AWS_REGION, AWS_ACCESS_KEY_ID,
89 89
 // AWS_SECRET_ACCESS_KEY, the shared credentials file (~/.aws/credentials), and
90 90
 // the EC2 Instance Metadata Service.
91
-func New(ctx logger.Context) (logger.Logger, error) {
92
-	logGroupName := ctx.Config[logGroupKey]
93
-	logStreamName, err := loggerutils.ParseLogTag(ctx, "{{.FullID}}")
91
+func New(info logger.Info) (logger.Logger, error) {
92
+	logGroupName := info.Config[logGroupKey]
93
+	logStreamName, err := loggerutils.ParseLogTag(info, "{{.FullID}}")
94 94
 	if err != nil {
95 95
 		return nil, err
96 96
 	}
97 97
 
98
-	if ctx.Config[logStreamKey] != "" {
99
-		logStreamName = ctx.Config[logStreamKey]
98
+	if info.Config[logStreamKey] != "" {
99
+		logStreamName = info.Config[logStreamKey]
100 100
 	}
101
-	client, err := newAWSLogsClient(ctx)
101
+	client, err := newAWSLogsClient(info)
102 102
 	if err != nil {
103 103
 		return nil, err
104 104
 	}
... ...
@@ -127,13 +127,13 @@ var newRegionFinder = func() regionFinder {
127 127
 // Customizations to the default client from the SDK include a Docker-specific
128 128
 // User-Agent string and automatic region detection using the EC2 Instance
129 129
 // Metadata Service when region is otherwise unspecified.
130
-func newAWSLogsClient(ctx logger.Context) (api, error) {
130
+func newAWSLogsClient(info logger.Info) (api, error) {
131 131
 	var region *string
132 132
 	if os.Getenv(regionEnvKey) != "" {
133 133
 		region = aws.String(os.Getenv(regionEnvKey))
134 134
 	}
135
-	if ctx.Config[regionKey] != "" {
136
-		region = aws.String(ctx.Config[regionKey])
135
+	if info.Config[regionKey] != "" {
136
+		region = aws.String(info.Config[regionKey])
137 137
 	}
138 138
 	if region == nil || *region == "" {
139 139
 		logrus.Info("Trying to get region from EC2 Metadata")
... ...
@@ -28,13 +28,13 @@ const (
28 28
 )
29 29
 
30 30
 func TestNewAWSLogsClientUserAgentHandler(t *testing.T) {
31
-	ctx := logger.Context{
31
+	info := logger.Info{
32 32
 		Config: map[string]string{
33 33
 			regionKey: "us-east-1",
34 34
 		},
35 35
 	}
36 36
 
37
-	client, err := newAWSLogsClient(ctx)
37
+	client, err := newAWSLogsClient(info)
38 38
 	if err != nil {
39 39
 		t.Fatal(err)
40 40
 	}
... ...
@@ -59,7 +59,7 @@ func TestNewAWSLogsClientUserAgentHandler(t *testing.T) {
59 59
 }
60 60
 
61 61
 func TestNewAWSLogsClientRegionDetect(t *testing.T) {
62
-	ctx := logger.Context{
62
+	info := logger.Info{
63 63
 		Config: map[string]string{},
64 64
 	}
65 65
 
... ...
@@ -71,7 +71,7 @@ func TestNewAWSLogsClientRegionDetect(t *testing.T) {
71 71
 		successResult: "us-east-1",
72 72
 	}
73 73
 
74
-	_, err := newAWSLogsClient(ctx)
74
+	_, err := newAWSLogsClient(info)
75 75
 	if err != nil {
76 76
 		t.Fatal(err)
77 77
 	}
... ...
@@ -695,12 +695,12 @@ func TestCollectBatchWithDuplicateTimestamps(t *testing.T) {
695 695
 
696 696
 func TestCreateTagSuccess(t *testing.T) {
697 697
 	mockClient := newMockClient()
698
-	ctx := logger.Context{
698
+	info := logger.Info{
699 699
 		ContainerName: "/test-container",
700 700
 		ContainerID:   "container-abcdefghijklmnopqrstuvwxyz01234567890",
701 701
 		Config:        map[string]string{"tag": "{{.Name}}/{{.FullID}}"},
702 702
 	}
703
-	logStreamName, e := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
703
+	logStreamName, e := loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
704 704
 	if e != nil {
705 705
 		t.Errorf("Error generating tag: %q", e)
706 706
 	}
707 707
deleted file mode 100644
... ...
@@ -1,111 +0,0 @@
1
-package logger
2
-
3
-import (
4
-	"fmt"
5
-	"os"
6
-	"strings"
7
-	"time"
8
-)
9
-
10
-// Context provides enough information for a logging driver to do its function.
11
-type Context struct {
12
-	Config              map[string]string
13
-	ContainerID         string
14
-	ContainerName       string
15
-	ContainerEntrypoint string
16
-	ContainerArgs       []string
17
-	ContainerImageID    string
18
-	ContainerImageName  string
19
-	ContainerCreated    time.Time
20
-	ContainerEnv        []string
21
-	ContainerLabels     map[string]string
22
-	LogPath             string
23
-	DaemonName          string
24
-}
25
-
26
-// ExtraAttributes returns the user-defined extra attributes (labels,
27
-// environment variables) in key-value format. This can be used by log drivers
28
-// that support metadata to add more context to a log.
29
-func (ctx *Context) ExtraAttributes(keyMod func(string) string) map[string]string {
30
-	extra := make(map[string]string)
31
-	labels, ok := ctx.Config["labels"]
32
-	if ok && len(labels) > 0 {
33
-		for _, l := range strings.Split(labels, ",") {
34
-			if v, ok := ctx.ContainerLabels[l]; ok {
35
-				if keyMod != nil {
36
-					l = keyMod(l)
37
-				}
38
-				extra[l] = v
39
-			}
40
-		}
41
-	}
42
-
43
-	env, ok := ctx.Config["env"]
44
-	if ok && len(env) > 0 {
45
-		envMapping := make(map[string]string)
46
-		for _, e := range ctx.ContainerEnv {
47
-			if kv := strings.SplitN(e, "=", 2); len(kv) == 2 {
48
-				envMapping[kv[0]] = kv[1]
49
-			}
50
-		}
51
-		for _, l := range strings.Split(env, ",") {
52
-			if v, ok := envMapping[l]; ok {
53
-				if keyMod != nil {
54
-					l = keyMod(l)
55
-				}
56
-				extra[l] = v
57
-			}
58
-		}
59
-	}
60
-
61
-	return extra
62
-}
63
-
64
-// Hostname returns the hostname from the underlying OS.
65
-func (ctx *Context) Hostname() (string, error) {
66
-	hostname, err := os.Hostname()
67
-	if err != nil {
68
-		return "", fmt.Errorf("logger: can not resolve hostname: %v", err)
69
-	}
70
-	return hostname, nil
71
-}
72
-
73
-// Command returns the command that the container being logged was
74
-// started with. The Entrypoint is prepended to the container
75
-// arguments.
76
-func (ctx *Context) Command() string {
77
-	terms := []string{ctx.ContainerEntrypoint}
78
-	terms = append(terms, ctx.ContainerArgs...)
79
-	command := strings.Join(terms, " ")
80
-	return command
81
-}
82
-
83
-// ID Returns the Container ID shortened to 12 characters.
84
-func (ctx *Context) ID() string {
85
-	return ctx.ContainerID[:12]
86
-}
87
-
88
-// FullID is an alias of ContainerID.
89
-func (ctx *Context) FullID() string {
90
-	return ctx.ContainerID
91
-}
92
-
93
-// Name returns the ContainerName without a preceding '/'.
94
-func (ctx *Context) Name() string {
95
-	return strings.TrimPrefix(ctx.ContainerName, "/")
96
-}
97
-
98
-// ImageID returns the ContainerImageID shortened to 12 characters.
99
-func (ctx *Context) ImageID() string {
100
-	return ctx.ContainerImageID[:12]
101
-}
102
-
103
-// ImageFullID is an alias of ContainerImageID.
104
-func (ctx *Context) ImageFullID() string {
105
-	return ctx.ContainerImageID
106
-}
107
-
108
-// ImageName is an alias of ContainerImageName
109
-func (ctx *Context) ImageName() string {
110
-	return ctx.ContainerImageName
111
-}
... ...
@@ -54,17 +54,17 @@ func init() {
54 54
 }
55 55
 
56 56
 // New creates a new etwLogs logger for the given container and registers the EWT provider.
57
-func New(ctx logger.Context) (logger.Logger, error) {
57
+func New(info logger.Info) (logger.Logger, error) {
58 58
 	if err := registerETWProvider(); err != nil {
59 59
 		return nil, err
60 60
 	}
61
-	logrus.Debugf("logging driver etwLogs configured for container: %s.", ctx.ContainerID)
61
+	logrus.Debugf("logging driver etwLogs configured for container: %s.", info.ContainerID)
62 62
 
63 63
 	return &etwLogs{
64
-		containerName: ctx.Name(),
65
-		imageName:     ctx.ContainerImageName,
66
-		containerID:   ctx.ContainerID,
67
-		imageID:       ctx.ContainerImageID,
64
+		containerName: info.Name(),
65
+		imageName:     info.ContainerImageName,
66
+		containerID:   info.ContainerID,
67
+		imageID:       info.ContainerImageID,
68 68
 	}, nil
69 69
 }
70 70
 
... ...
@@ -6,7 +6,7 @@ import (
6 6
 )
7 7
 
8 8
 // Creator builds a logging driver instance with given context.
9
-type Creator func(Context) (Logger, error)
9
+type Creator func(Info) (Logger, error)
10 10
 
11 11
 // LogOptValidator checks the options specific to the underlying
12 12
 // logging implementation.
... ...
@@ -67,22 +67,22 @@ func init() {
67 67
 // New creates a fluentd logger using the configuration passed in on
68 68
 // the context. The supported context configuration variable is
69 69
 // fluentd-address.
70
-func New(ctx logger.Context) (logger.Logger, error) {
71
-	loc, err := parseAddress(ctx.Config[addressKey])
70
+func New(info logger.Info) (logger.Logger, error) {
71
+	loc, err := parseAddress(info.Config[addressKey])
72 72
 	if err != nil {
73 73
 		return nil, err
74 74
 	}
75 75
 
76
-	tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
76
+	tag, err := loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
77 77
 	if err != nil {
78 78
 		return nil, err
79 79
 	}
80 80
 
81
-	extra := ctx.ExtraAttributes(nil)
81
+	extra := info.ExtraAttributes(nil)
82 82
 
83 83
 	bufferLimit := defaultBufferLimit
84
-	if ctx.Config[bufferLimitKey] != "" {
85
-		bl64, err := units.RAMInBytes(ctx.Config[bufferLimitKey])
84
+	if info.Config[bufferLimitKey] != "" {
85
+		bl64, err := units.RAMInBytes(info.Config[bufferLimitKey])
86 86
 		if err != nil {
87 87
 			return nil, err
88 88
 		}
... ...
@@ -90,8 +90,8 @@ func New(ctx logger.Context) (logger.Logger, error) {
90 90
 	}
91 91
 
92 92
 	retryWait := defaultRetryWait
93
-	if ctx.Config[retryWaitKey] != "" {
94
-		rwd, err := time.ParseDuration(ctx.Config[retryWaitKey])
93
+	if info.Config[retryWaitKey] != "" {
94
+		rwd, err := time.ParseDuration(info.Config[retryWaitKey])
95 95
 		if err != nil {
96 96
 			return nil, err
97 97
 		}
... ...
@@ -99,8 +99,8 @@ func New(ctx logger.Context) (logger.Logger, error) {
99 99
 	}
100 100
 
101 101
 	maxRetries := defaultMaxRetries
102
-	if ctx.Config[maxRetriesKey] != "" {
103
-		mr64, err := strconv.ParseUint(ctx.Config[maxRetriesKey], 10, strconv.IntSize)
102
+	if info.Config[maxRetriesKey] != "" {
103
+		mr64, err := strconv.ParseUint(info.Config[maxRetriesKey], 10, strconv.IntSize)
104 104
 		if err != nil {
105 105
 			return nil, err
106 106
 		}
... ...
@@ -108,8 +108,8 @@ func New(ctx logger.Context) (logger.Logger, error) {
108 108
 	}
109 109
 
110 110
 	asyncConnect := false
111
-	if ctx.Config[asyncConnectKey] != "" {
112
-		if asyncConnect, err = strconv.ParseBool(ctx.Config[asyncConnectKey]); err != nil {
111
+	if info.Config[asyncConnectKey] != "" {
112
+		if asyncConnect, err = strconv.ParseBool(info.Config[asyncConnectKey]); err != nil {
113 113
 			return nil, err
114 114
 		}
115 115
 	}
... ...
@@ -125,7 +125,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
125 125
 		AsyncConnect:     asyncConnect,
126 126
 	}
127 127
 
128
-	logrus.WithField("container", ctx.ContainerID).WithField("config", fluentConfig).
128
+	logrus.WithField("container", info.ContainerID).WithField("config", fluentConfig).
129 129
 		Debug("logging driver fluentd configured")
130 130
 
131 131
 	log, err := fluent.New(fluentConfig)
... ...
@@ -134,8 +134,8 @@ func New(ctx logger.Context) (logger.Logger, error) {
134 134
 	}
135 135
 	return &fluentd{
136 136
 		tag:           tag,
137
-		containerID:   ctx.ContainerID,
138
-		containerName: ctx.ContainerName,
137
+		containerID:   info.ContainerID,
138
+		containerName: info.ContainerName,
139 139
 		writer:        log,
140 140
 		extra:         extra,
141 141
 	}, nil
... ...
@@ -100,14 +100,14 @@ func initGCP() {
100 100
 // default credentials.
101 101
 //
102 102
 // See https://developers.google.com/identity/protocols/application-default-credentials
103
-func New(ctx logger.Context) (logger.Logger, error) {
103
+func New(info logger.Info) (logger.Logger, error) {
104 104
 	initGCP()
105 105
 
106 106
 	var project string
107 107
 	if projectID != "" {
108 108
 		project = projectID
109 109
 	}
110
-	if projectID, found := ctx.Config[projectOptKey]; found {
110
+	if projectID, found := info.Config[projectOptKey]; found {
111 111
 		project = projectID
112 112
 	}
113 113
 	if project == "" {
... ...
@@ -127,17 +127,17 @@ func New(ctx logger.Context) (logger.Logger, error) {
127 127
 	l := &gcplogs{
128 128
 		logger: lg,
129 129
 		container: &containerInfo{
130
-			Name:      ctx.ContainerName,
131
-			ID:        ctx.ContainerID,
132
-			ImageName: ctx.ContainerImageName,
133
-			ImageID:   ctx.ContainerImageID,
134
-			Created:   ctx.ContainerCreated,
135
-			Metadata:  ctx.ExtraAttributes(nil),
130
+			Name:      info.ContainerName,
131
+			ID:        info.ContainerID,
132
+			ImageName: info.ContainerImageName,
133
+			ImageID:   info.ContainerImageID,
134
+			Created:   info.ContainerCreated,
135
+			Metadata:  info.ExtraAttributes(nil),
136 136
 		},
137 137
 	}
138 138
 
139
-	if ctx.Config[logCmdKey] == "true" {
140
-		l.container.Command = ctx.Command()
139
+	if info.Config[logCmdKey] == "true" {
140
+		l.container.Command = info.Command()
141 141
 	}
142 142
 
143 143
 	if onGCE {
... ...
@@ -146,11 +146,11 @@ func New(ctx logger.Context) (logger.Logger, error) {
146 146
 			Name: instanceName,
147 147
 			ID:   instanceID,
148 148
 		}
149
-	} else if ctx.Config[logZoneKey] != "" || ctx.Config[logNameKey] != "" || ctx.Config[logIDKey] != "" {
149
+	} else if info.Config[logZoneKey] != "" || info.Config[logNameKey] != "" || info.Config[logIDKey] != "" {
150 150
 		l.instance = &instanceInfo{
151
-			Zone: ctx.Config[logZoneKey],
152
-			Name: ctx.Config[logNameKey],
153
-			ID:   ctx.Config[logIDKey],
151
+			Zone: info.Config[logZoneKey],
152
+			Name: info.Config[logNameKey],
153
+			ID:   info.Config[logIDKey],
154 154
 		}
155 155
 	}
156 156
 
... ...
@@ -24,7 +24,7 @@ const name = "gelf"
24 24
 
25 25
 type gelfLogger struct {
26 26
 	writer   *gelf.Writer
27
-	ctx      logger.Context
27
+	info     logger.Info
28 28
 	hostname string
29 29
 	rawExtra json.RawMessage
30 30
 }
... ...
@@ -40,36 +40,36 @@ func init() {
40 40
 
41 41
 // New creates a gelf logger using the configuration passed in on the
42 42
 // context. The supported context configuration variable is gelf-address.
43
-func New(ctx logger.Context) (logger.Logger, error) {
43
+func New(info logger.Info) (logger.Logger, error) {
44 44
 	// parse gelf address
45
-	address, err := parseAddress(ctx.Config["gelf-address"])
45
+	address, err := parseAddress(info.Config["gelf-address"])
46 46
 	if err != nil {
47 47
 		return nil, err
48 48
 	}
49 49
 
50 50
 	// collect extra data for GELF message
51
-	hostname, err := ctx.Hostname()
51
+	hostname, err := info.Hostname()
52 52
 	if err != nil {
53 53
 		return nil, fmt.Errorf("gelf: cannot access hostname to set source field")
54 54
 	}
55 55
 
56 56
 	// parse log tag
57
-	tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
57
+	tag, err := loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
58 58
 	if err != nil {
59 59
 		return nil, err
60 60
 	}
61 61
 
62 62
 	extra := map[string]interface{}{
63
-		"_container_id":   ctx.ContainerID,
64
-		"_container_name": ctx.Name(),
65
-		"_image_id":       ctx.ContainerImageID,
66
-		"_image_name":     ctx.ContainerImageName,
67
-		"_command":        ctx.Command(),
63
+		"_container_id":   info.ContainerID,
64
+		"_container_name": info.Name(),
65
+		"_image_id":       info.ContainerImageID,
66
+		"_image_name":     info.ContainerImageName,
67
+		"_command":        info.Command(),
68 68
 		"_tag":            tag,
69
-		"_created":        ctx.ContainerCreated,
69
+		"_created":        info.ContainerCreated,
70 70
 	}
71 71
 
72
-	extraAttrs := ctx.ExtraAttributes(func(key string) string {
72
+	extraAttrs := info.ExtraAttributes(func(key string) string {
73 73
 		if key[0] == '_' {
74 74
 			return key
75 75
 		}
... ...
@@ -90,7 +90,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
90 90
 		return nil, fmt.Errorf("gelf: cannot connect to GELF endpoint: %s %v", address, err)
91 91
 	}
92 92
 
93
-	if v, ok := ctx.Config["gelf-compression-type"]; ok {
93
+	if v, ok := info.Config["gelf-compression-type"]; ok {
94 94
 		switch v {
95 95
 		case "gzip":
96 96
 			gelfWriter.CompressionType = gelf.CompressGzip
... ...
@@ -103,7 +103,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
103 103
 		}
104 104
 	}
105 105
 
106
-	if v, ok := ctx.Config["gelf-compression-level"]; ok {
106
+	if v, ok := info.Config["gelf-compression-level"]; ok {
107 107
 		val, err := strconv.Atoi(v)
108 108
 		if err != nil {
109 109
 			return nil, fmt.Errorf("gelf: invalid compression level %s, err %v", v, err)
... ...
@@ -113,7 +113,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
113 113
 
114 114
 	return &gelfLogger{
115 115
 		writer:   gelfWriter,
116
-		ctx:      ctx,
116
+		info:     info,
117 117
 		hostname: hostname,
118 118
 		rawExtra: rawExtra,
119 119
 	}, nil
... ...
@@ -58,24 +58,24 @@ func sanitizeKeyMod(s string) string {
58 58
 
59 59
 // New creates a journald logger using the configuration passed in on
60 60
 // the context.
61
-func New(ctx logger.Context) (logger.Logger, error) {
61
+func New(info logger.Info) (logger.Logger, error) {
62 62
 	if !journal.Enabled() {
63 63
 		return nil, fmt.Errorf("journald is not enabled on this host")
64 64
 	}
65 65
 
66 66
 	// parse log tag
67
-	tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
67
+	tag, err := loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
68 68
 	if err != nil {
69 69
 		return nil, err
70 70
 	}
71 71
 
72 72
 	vars := map[string]string{
73
-		"CONTAINER_ID":      ctx.ContainerID[:12],
74
-		"CONTAINER_ID_FULL": ctx.ContainerID,
75
-		"CONTAINER_NAME":    ctx.Name(),
73
+		"CONTAINER_ID":      info.ContainerID[:12],
74
+		"CONTAINER_ID_FULL": info.ContainerID,
75
+		"CONTAINER_NAME":    info.Name(),
76 76
 		"CONTAINER_TAG":     tag,
77 77
 	}
78
-	extraAttrs := ctx.ExtraAttributes(sanitizeKeyMod)
78
+	extraAttrs := info.ExtraAttributes(sanitizeKeyMod)
79 79
 	for k, v := range extraAttrs {
80 80
 		vars[k] = v
81 81
 	}
... ...
@@ -40,9 +40,9 @@ func init() {
40 40
 
41 41
 // New creates new JSONFileLogger which writes to filename passed in
42 42
 // on given context.
43
-func New(ctx logger.Context) (logger.Logger, error) {
43
+func New(info logger.Info) (logger.Logger, error) {
44 44
 	var capval int64 = -1
45
-	if capacity, ok := ctx.Config["max-size"]; ok {
45
+	if capacity, ok := info.Config["max-size"]; ok {
46 46
 		var err error
47 47
 		capval, err = units.FromHumanSize(capacity)
48 48
 		if err != nil {
... ...
@@ -50,7 +50,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
50 50
 		}
51 51
 	}
52 52
 	var maxFiles = 1
53
-	if maxFileString, ok := ctx.Config["max-file"]; ok {
53
+	if maxFileString, ok := info.Config["max-file"]; ok {
54 54
 		var err error
55 55
 		maxFiles, err = strconv.Atoi(maxFileString)
56 56
 		if err != nil {
... ...
@@ -61,13 +61,13 @@ func New(ctx logger.Context) (logger.Logger, error) {
61 61
 		}
62 62
 	}
63 63
 
64
-	writer, err := loggerutils.NewRotateFileWriter(ctx.LogPath, capval, maxFiles)
64
+	writer, err := loggerutils.NewRotateFileWriter(info.LogPath, capval, maxFiles)
65 65
 	if err != nil {
66 66
 		return nil, err
67 67
 	}
68 68
 
69 69
 	var extra []byte
70
-	if attrs := ctx.ExtraAttributes(nil); len(attrs) > 0 {
70
+	if attrs := info.ExtraAttributes(nil); len(attrs) > 0 {
71 71
 		var err error
72 72
 		extra, err = json.Marshal(attrs)
73 73
 		if err != nil {
... ...
@@ -22,7 +22,7 @@ func TestJSONFileLogger(t *testing.T) {
22 22
 	}
23 23
 	defer os.RemoveAll(tmp)
24 24
 	filename := filepath.Join(tmp, "container.log")
25
-	l, err := New(logger.Context{
25
+	l, err := New(logger.Info{
26 26
 		ContainerID: cid,
27 27
 		LogPath:     filename,
28 28
 	})
... ...
@@ -62,7 +62,7 @@ func BenchmarkJSONFileLogger(b *testing.B) {
62 62
 	}
63 63
 	defer os.RemoveAll(tmp)
64 64
 	filename := filepath.Join(tmp, "container.log")
65
-	l, err := New(logger.Context{
65
+	l, err := New(logger.Info{
66 66
 		ContainerID: cid,
67 67
 		LogPath:     filename,
68 68
 	})
... ...
@@ -97,7 +97,7 @@ func TestJSONFileLoggerWithOpts(t *testing.T) {
97 97
 	defer os.RemoveAll(tmp)
98 98
 	filename := filepath.Join(tmp, "container.log")
99 99
 	config := map[string]string{"max-file": "2", "max-size": "1k"}
100
-	l, err := New(logger.Context{
100
+	l, err := New(logger.Info{
101 101
 		ContainerID: cid,
102 102
 		LogPath:     filename,
103 103
 		Config:      config,
... ...
@@ -161,7 +161,7 @@ func TestJSONFileLoggerWithLabelsEnv(t *testing.T) {
161 161
 	defer os.RemoveAll(tmp)
162 162
 	filename := filepath.Join(tmp, "container.log")
163 163
 	config := map[string]string{"labels": "rack,dc", "env": "environ,debug,ssl"}
164
-	l, err := New(logger.Context{
164
+	l, err := New(logger.Info{
165 165
 		ContainerID:     cid,
166 166
 		LogPath:         filename,
167 167
 		Config:          config,
... ...
@@ -210,7 +210,7 @@ func BenchmarkJSONFileLoggerWithReader(b *testing.B) {
210 210
 	}
211 211
 	defer os.RemoveAll(dir)
212 212
 
213
-	l, err := New(logger.Context{
213
+	l, err := New(logger.Info{
214 214
 		ContainerID: cid,
215 215
 		LogPath:     filepath.Join(dir, "container.log"),
216 216
 	})
... ...
@@ -35,18 +35,18 @@ func init() {
35 35
 // New creates a logentries logger using the configuration passed in on
36 36
 // the context. The supported context configuration variable is
37 37
 // logentries-token.
38
-func New(ctx logger.Context) (logger.Logger, error) {
39
-	logrus.WithField("container", ctx.ContainerID).
40
-		WithField("token", ctx.Config[token]).
38
+func New(info logger.Info) (logger.Logger, error) {
39
+	logrus.WithField("container", info.ContainerID).
40
+		WithField("token", info.Config[token]).
41 41
 		Debug("logging driver logentries configured")
42 42
 
43
-	log, err := le_go.Connect(ctx.Config[token])
43
+	log, err := le_go.Connect(info.Config[token])
44 44
 	if err != nil {
45 45
 		return nil, err
46 46
 	}
47 47
 	return &logentries{
48
-		containerID:   ctx.ContainerID,
49
-		containerName: ctx.ContainerName,
48
+		containerID:   info.ContainerID,
49
+		containerName: info.ContainerName,
50 50
 		writer:        log,
51 51
 	}, nil
52 52
 }
... ...
@@ -12,8 +12,8 @@ const DefaultTemplate = "{{.ID}}"
12 12
 
13 13
 // ParseLogTag generates a context aware tag for consistency across different
14 14
 // log drivers based on the context of the running container.
15
-func ParseLogTag(ctx logger.Context, defaultTemplate string) (string, error) {
16
-	tagTemplate := ctx.Config["tag"]
15
+func ParseLogTag(info logger.Info, defaultTemplate string) (string, error) {
16
+	tagTemplate := info.Config["tag"]
17 17
 	if tagTemplate == "" {
18 18
 		tagTemplate = defaultTemplate
19 19
 	}
... ...
@@ -23,7 +23,7 @@ func ParseLogTag(ctx logger.Context, defaultTemplate string) (string, error) {
23 23
 		return "", err
24 24
 	}
25 25
 	buf := new(bytes.Buffer)
26
-	if err := tmpl.Execute(buf, &ctx); err != nil {
26
+	if err := tmpl.Execute(buf, &info); err != nil {
27 27
 		return "", err
28 28
 	}
29 29
 
... ...
@@ -7,27 +7,27 @@ import (
7 7
 )
8 8
 
9 9
 func TestParseLogTagDefaultTag(t *testing.T) {
10
-	ctx := buildContext(map[string]string{})
11
-	tag, e := ParseLogTag(ctx, "{{.ID}}")
12
-	assertTag(t, e, tag, ctx.ID())
10
+	info := buildContext(map[string]string{})
11
+	tag, e := ParseLogTag(info, "{{.ID}}")
12
+	assertTag(t, e, tag, info.ID())
13 13
 }
14 14
 
15 15
 func TestParseLogTag(t *testing.T) {
16
-	ctx := buildContext(map[string]string{"tag": "{{.ImageName}}/{{.Name}}/{{.ID}}"})
17
-	tag, e := ParseLogTag(ctx, "{{.ID}}")
16
+	info := buildContext(map[string]string{"tag": "{{.ImageName}}/{{.Name}}/{{.ID}}"})
17
+	tag, e := ParseLogTag(info, "{{.ID}}")
18 18
 	assertTag(t, e, tag, "test-image/test-container/container-ab")
19 19
 }
20 20
 
21 21
 func TestParseLogTagEmptyTag(t *testing.T) {
22
-	ctx := buildContext(map[string]string{})
23
-	tag, e := ParseLogTag(ctx, "{{.DaemonName}}/{{.ID}}")
22
+	info := buildContext(map[string]string{})
23
+	tag, e := ParseLogTag(info, "{{.DaemonName}}/{{.ID}}")
24 24
 	assertTag(t, e, tag, "test-dockerd/container-ab")
25 25
 }
26 26
 
27 27
 // Helpers
28 28
 
29
-func buildContext(cfg map[string]string) logger.Context {
30
-	return logger.Context{
29
+func buildContext(cfg map[string]string) logger.Info {
30
+	return logger.Info{
31 31
 		ContainerID:        "container-abcdefghijklmnopqrstuvwxyz01234567890",
32 32
 		ContainerName:      "/test-container",
33 33
 		ContainerImageID:   "image-abcdefghijklmnopqrstuvwxyz01234567890",
34 34
new file mode 100644
... ...
@@ -0,0 +1,111 @@
0
+package logger
1
+
2
+import (
3
+	"fmt"
4
+	"os"
5
+	"strings"
6
+	"time"
7
+)
8
+
9
+// Info provides enough information for a logging driver to do its function.
10
+type Info struct {
11
+	Config              map[string]string
12
+	ContainerID         string
13
+	ContainerName       string
14
+	ContainerEntrypoint string
15
+	ContainerArgs       []string
16
+	ContainerImageID    string
17
+	ContainerImageName  string
18
+	ContainerCreated    time.Time
19
+	ContainerEnv        []string
20
+	ContainerLabels     map[string]string
21
+	LogPath             string
22
+	DaemonName          string
23
+}
24
+
25
+// ExtraAttributes returns the user-defined extra attributes (labels,
26
+// environment variables) in key-value format. This can be used by log drivers
27
+// that support metadata to add more context to a log.
28
+func (info *Info) ExtraAttributes(keyMod func(string) string) map[string]string {
29
+	extra := make(map[string]string)
30
+	labels, ok := info.Config["labels"]
31
+	if ok && len(labels) > 0 {
32
+		for _, l := range strings.Split(labels, ",") {
33
+			if v, ok := info.ContainerLabels[l]; ok {
34
+				if keyMod != nil {
35
+					l = keyMod(l)
36
+				}
37
+				extra[l] = v
38
+			}
39
+		}
40
+	}
41
+
42
+	env, ok := info.Config["env"]
43
+	if ok && len(env) > 0 {
44
+		envMapping := make(map[string]string)
45
+		for _, e := range info.ContainerEnv {
46
+			if kv := strings.SplitN(e, "=", 2); len(kv) == 2 {
47
+				envMapping[kv[0]] = kv[1]
48
+			}
49
+		}
50
+		for _, l := range strings.Split(env, ",") {
51
+			if v, ok := envMapping[l]; ok {
52
+				if keyMod != nil {
53
+					l = keyMod(l)
54
+				}
55
+				extra[l] = v
56
+			}
57
+		}
58
+	}
59
+
60
+	return extra
61
+}
62
+
63
+// Hostname returns the hostname from the underlying OS.
64
+func (info *Info) Hostname() (string, error) {
65
+	hostname, err := os.Hostname()
66
+	if err != nil {
67
+		return "", fmt.Errorf("logger: can not resolve hostname: %v", err)
68
+	}
69
+	return hostname, nil
70
+}
71
+
72
+// Command returns the command that the container being logged was
73
+// started with. The Entrypoint is prepended to the container
74
+// arguments.
75
+func (info *Info) Command() string {
76
+	terms := []string{info.ContainerEntrypoint}
77
+	terms = append(terms, info.ContainerArgs...)
78
+	command := strings.Join(terms, " ")
79
+	return command
80
+}
81
+
82
+// ID Returns the Container ID shortened to 12 characters.
83
+func (info *Info) ID() string {
84
+	return info.ContainerID[:12]
85
+}
86
+
87
+// FullID is an alias of ContainerID.
88
+func (info *Info) FullID() string {
89
+	return info.ContainerID
90
+}
91
+
92
+// Name returns the ContainerName without a preceding '/'.
93
+func (info *Info) Name() string {
94
+	return strings.TrimPrefix(info.ContainerName, "/")
95
+}
96
+
97
+// ImageID returns the ContainerImageID shortened to 12 characters.
98
+func (info *Info) ImageID() string {
99
+	return info.ContainerImageID[:12]
100
+}
101
+
102
+// ImageFullID is an alias of ContainerImageID.
103
+func (info *Info) ImageFullID() string {
104
+	return info.ContainerImageID
105
+}
106
+
107
+// ImageName is an alias of ContainerImageName
108
+func (info *Info) ImageName() string {
109
+	return info.ContainerImageName
110
+}
... ...
@@ -140,20 +140,20 @@ func init() {
140 140
 }
141 141
 
142 142
 // New creates splunk logger driver using configuration passed in context
143
-func New(ctx logger.Context) (logger.Logger, error) {
144
-	hostname, err := ctx.Hostname()
143
+func New(info logger.Info) (logger.Logger, error) {
144
+	hostname, err := info.Hostname()
145 145
 	if err != nil {
146 146
 		return nil, fmt.Errorf("%s: cannot access hostname to set source field", driverName)
147 147
 	}
148 148
 
149 149
 	// Parse and validate Splunk URL
150
-	splunkURL, err := parseURL(ctx)
150
+	splunkURL, err := parseURL(info)
151 151
 	if err != nil {
152 152
 		return nil, err
153 153
 	}
154 154
 
155 155
 	// Splunk Token is required parameter
156
-	splunkToken, ok := ctx.Config[splunkTokenKey]
156
+	splunkToken, ok := info.Config[splunkTokenKey]
157 157
 	if !ok {
158 158
 		return nil, fmt.Errorf("%s: %s is expected", driverName, splunkTokenKey)
159 159
 	}
... ...
@@ -162,7 +162,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
162 162
 
163 163
 	// Splunk is using autogenerated certificates by default,
164 164
 	// allow users to trust them with skipping verification
165
-	if insecureSkipVerifyStr, ok := ctx.Config[splunkInsecureSkipVerifyKey]; ok {
165
+	if insecureSkipVerifyStr, ok := info.Config[splunkInsecureSkipVerifyKey]; ok {
166 166
 		insecureSkipVerify, err := strconv.ParseBool(insecureSkipVerifyStr)
167 167
 		if err != nil {
168 168
 			return nil, err
... ...
@@ -171,7 +171,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
171 171
 	}
172 172
 
173 173
 	// If path to the root certificate is provided - load it
174
-	if caPath, ok := ctx.Config[splunkCAPathKey]; ok {
174
+	if caPath, ok := info.Config[splunkCAPathKey]; ok {
175 175
 		caCert, err := ioutil.ReadFile(caPath)
176 176
 		if err != nil {
177 177
 			return nil, err
... ...
@@ -181,12 +181,12 @@ func New(ctx logger.Context) (logger.Logger, error) {
181 181
 		tlsConfig.RootCAs = caPool
182 182
 	}
183 183
 
184
-	if caName, ok := ctx.Config[splunkCANameKey]; ok {
184
+	if caName, ok := info.Config[splunkCANameKey]; ok {
185 185
 		tlsConfig.ServerName = caName
186 186
 	}
187 187
 
188 188
 	gzipCompression := false
189
-	if gzipCompressionStr, ok := ctx.Config[splunkGzipCompressionKey]; ok {
189
+	if gzipCompressionStr, ok := info.Config[splunkGzipCompressionKey]; ok {
190 190
 		gzipCompression, err = strconv.ParseBool(gzipCompressionStr)
191 191
 		if err != nil {
192 192
 			return nil, err
... ...
@@ -194,7 +194,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
194 194
 	}
195 195
 
196 196
 	gzipCompressionLevel := gzip.DefaultCompression
197
-	if gzipCompressionLevelStr, ok := ctx.Config[splunkGzipCompressionLevelKey]; ok {
197
+	if gzipCompressionLevelStr, ok := info.Config[splunkGzipCompressionLevelKey]; ok {
198 198
 		var err error
199 199
 		gzipCompressionLevel64, err := strconv.ParseInt(gzipCompressionLevelStr, 10, 32)
200 200
 		if err != nil {
... ...
@@ -215,9 +215,9 @@ func New(ctx logger.Context) (logger.Logger, error) {
215 215
 		Transport: transport,
216 216
 	}
217 217
 
218
-	source := ctx.Config[splunkSourceKey]
219
-	sourceType := ctx.Config[splunkSourceTypeKey]
220
-	index := ctx.Config[splunkIndexKey]
218
+	source := info.Config[splunkSourceKey]
219
+	sourceType := info.Config[splunkSourceTypeKey]
220
+	index := info.Config[splunkIndexKey]
221 221
 
222 222
 	var nullMessage = &splunkMessage{
223 223
 		Host:       hostname,
... ...
@@ -228,14 +228,14 @@ func New(ctx logger.Context) (logger.Logger, error) {
228 228
 
229 229
 	// Allow user to remove tag from the messages by setting tag to empty string
230 230
 	tag := ""
231
-	if tagTemplate, ok := ctx.Config[tagKey]; !ok || tagTemplate != "" {
232
-		tag, err = loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
231
+	if tagTemplate, ok := info.Config[tagKey]; !ok || tagTemplate != "" {
232
+		tag, err = loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
233 233
 		if err != nil {
234 234
 			return nil, err
235 235
 		}
236 236
 	}
237 237
 
238
-	attrs := ctx.ExtraAttributes(nil)
238
+	attrs := info.ExtraAttributes(nil)
239 239
 
240 240
 	var (
241 241
 		postMessagesFrequency = getAdvancedOptionDuration(envVarPostMessagesFrequency, defaultPostMessagesFrequency)
... ...
@@ -260,7 +260,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
260 260
 
261 261
 	// By default we verify connection, but we allow use to skip that
262 262
 	verifyConnection := true
263
-	if verifyConnectionStr, ok := ctx.Config[splunkVerifyConnectionKey]; ok {
263
+	if verifyConnectionStr, ok := info.Config[splunkVerifyConnectionKey]; ok {
264 264
 		var err error
265 265
 		verifyConnection, err = strconv.ParseBool(verifyConnectionStr)
266 266
 		if err != nil {
... ...
@@ -275,7 +275,7 @@ func New(ctx logger.Context) (logger.Logger, error) {
275 275
 	}
276 276
 
277 277
 	var splunkFormat string
278
-	if splunkFormatParsed, ok := ctx.Config[splunkFormatKey]; ok {
278
+	if splunkFormatParsed, ok := info.Config[splunkFormatKey]; ok {
279 279
 		switch splunkFormatParsed {
280 280
 		case splunkFormatInline:
281 281
 		case splunkFormatJSON:
... ...
@@ -547,8 +547,8 @@ func ValidateLogOpt(cfg map[string]string) error {
547 547
 	return nil
548 548
 }
549 549
 
550
-func parseURL(ctx logger.Context) (*url.URL, error) {
551
-	splunkURLStr, ok := ctx.Config[splunkURLKey]
550
+func parseURL(info logger.Info) (*url.URL, error) {
551
+	splunkURLStr, ok := info.Config[splunkURLKey]
552 552
 	if !ok {
553 553
 		return nil, fmt.Errorf("%s: %s is expected", driverName, splunkURLKey)
554 554
 	}
... ...
@@ -43,10 +43,10 @@ func TestValidateLogOpt(t *testing.T) {
43 43
 
44 44
 // Driver require user to specify required options
45 45
 func TestNewMissedConfig(t *testing.T) {
46
-	ctx := logger.Context{
46
+	info := logger.Info{
47 47
 		Config: map[string]string{},
48 48
 	}
49
-	_, err := New(ctx)
49
+	_, err := New(info)
50 50
 	if err == nil {
51 51
 		t.Fatal("Logger driver should fail when no required parameters specified")
52 52
 	}
... ...
@@ -54,12 +54,12 @@ func TestNewMissedConfig(t *testing.T) {
54 54
 
55 55
 // Driver require user to specify splunk-url
56 56
 func TestNewMissedUrl(t *testing.T) {
57
-	ctx := logger.Context{
57
+	info := logger.Info{
58 58
 		Config: map[string]string{
59 59
 			splunkTokenKey: "4642492F-D8BD-47F1-A005-0C08AE4657DF",
60 60
 		},
61 61
 	}
62
-	_, err := New(ctx)
62
+	_, err := New(info)
63 63
 	if err.Error() != "splunk: splunk-url is expected" {
64 64
 		t.Fatal("Logger driver should fail when no required parameters specified")
65 65
 	}
... ...
@@ -67,12 +67,12 @@ func TestNewMissedUrl(t *testing.T) {
67 67
 
68 68
 // Driver require user to specify splunk-token
69 69
 func TestNewMissedToken(t *testing.T) {
70
-	ctx := logger.Context{
70
+	info := logger.Info{
71 71
 		Config: map[string]string{
72 72
 			splunkURLKey: "http://127.0.0.1:8088",
73 73
 		},
74 74
 	}
75
-	_, err := New(ctx)
75
+	_, err := New(info)
76 76
 	if err.Error() != "splunk: splunk-token is expected" {
77 77
 		t.Fatal("Logger driver should fail when no required parameters specified")
78 78
 	}
... ...
@@ -84,7 +84,7 @@ func TestDefault(t *testing.T) {
84 84
 
85 85
 	go hec.Serve()
86 86
 
87
-	ctx := logger.Context{
87
+	info := logger.Info{
88 88
 		Config: map[string]string{
89 89
 			splunkURLKey:   hec.URL(),
90 90
 			splunkTokenKey: hec.token,
... ...
@@ -95,12 +95,12 @@ func TestDefault(t *testing.T) {
95 95
 		ContainerImageName: "container_image_name",
96 96
 	}
97 97
 
98
-	hostname, err := ctx.Hostname()
98
+	hostname, err := info.Hostname()
99 99
 	if err != nil {
100 100
 		t.Fatal(err)
101 101
 	}
102 102
 
103
-	loggerDriver, err := New(ctx)
103
+	loggerDriver, err := New(info)
104 104
 	if err != nil {
105 105
 		t.Fatal(err)
106 106
 	}
... ...
@@ -206,7 +206,7 @@ func TestInlineFormatWithNonDefaultOptions(t *testing.T) {
206 206
 
207 207
 	go hec.Serve()
208 208
 
209
-	ctx := logger.Context{
209
+	info := logger.Info{
210 210
 		Config: map[string]string{
211 211
 			splunkURLKey:             hec.URL(),
212 212
 			splunkTokenKey:           hec.token,
... ...
@@ -227,12 +227,12 @@ func TestInlineFormatWithNonDefaultOptions(t *testing.T) {
227 227
 		},
228 228
 	}
229 229
 
230
-	hostname, err := ctx.Hostname()
230
+	hostname, err := info.Hostname()
231 231
 	if err != nil {
232 232
 		t.Fatal(err)
233 233
 	}
234 234
 
235
-	loggerDriver, err := New(ctx)
235
+	loggerDriver, err := New(info)
236 236
 	if err != nil {
237 237
 		t.Fatal(err)
238 238
 	}
... ...
@@ -312,7 +312,7 @@ func TestJsonFormat(t *testing.T) {
312 312
 
313 313
 	go hec.Serve()
314 314
 
315
-	ctx := logger.Context{
315
+	info := logger.Info{
316 316
 		Config: map[string]string{
317 317
 			splunkURLKey:                  hec.URL(),
318 318
 			splunkTokenKey:                hec.token,
... ...
@@ -326,12 +326,12 @@ func TestJsonFormat(t *testing.T) {
326 326
 		ContainerImageName: "container_image_name",
327 327
 	}
328 328
 
329
-	hostname, err := ctx.Hostname()
329
+	hostname, err := info.Hostname()
330 330
 	if err != nil {
331 331
 		t.Fatal(err)
332 332
 	}
333 333
 
334
-	loggerDriver, err := New(ctx)
334
+	loggerDriver, err := New(info)
335 335
 	if err != nil {
336 336
 		t.Fatal(err)
337 337
 	}
... ...
@@ -431,7 +431,7 @@ func TestRawFormat(t *testing.T) {
431 431
 
432 432
 	go hec.Serve()
433 433
 
434
-	ctx := logger.Context{
434
+	info := logger.Info{
435 435
 		Config: map[string]string{
436 436
 			splunkURLKey:    hec.URL(),
437 437
 			splunkTokenKey:  hec.token,
... ...
@@ -443,12 +443,12 @@ func TestRawFormat(t *testing.T) {
443 443
 		ContainerImageName: "container_image_name",
444 444
 	}
445 445
 
446
-	hostname, err := ctx.Hostname()
446
+	hostname, err := info.Hostname()
447 447
 	if err != nil {
448 448
 		t.Fatal(err)
449 449
 	}
450 450
 
451
-	loggerDriver, err := New(ctx)
451
+	loggerDriver, err := New(info)
452 452
 	if err != nil {
453 453
 		t.Fatal(err)
454 454
 	}
... ...
@@ -541,7 +541,7 @@ func TestRawFormatWithLabels(t *testing.T) {
541 541
 
542 542
 	go hec.Serve()
543 543
 
544
-	ctx := logger.Context{
544
+	info := logger.Info{
545 545
 		Config: map[string]string{
546 546
 			splunkURLKey:    hec.URL(),
547 547
 			splunkTokenKey:  hec.token,
... ...
@@ -557,12 +557,12 @@ func TestRawFormatWithLabels(t *testing.T) {
557 557
 		},
558 558
 	}
559 559
 
560
-	hostname, err := ctx.Hostname()
560
+	hostname, err := info.Hostname()
561 561
 	if err != nil {
562 562
 		t.Fatal(err)
563 563
 	}
564 564
 
565
-	loggerDriver, err := New(ctx)
565
+	loggerDriver, err := New(info)
566 566
 	if err != nil {
567 567
 		t.Fatal(err)
568 568
 	}
... ...
@@ -656,7 +656,7 @@ func TestRawFormatWithoutTag(t *testing.T) {
656 656
 
657 657
 	go hec.Serve()
658 658
 
659
-	ctx := logger.Context{
659
+	info := logger.Info{
660 660
 		Config: map[string]string{
661 661
 			splunkURLKey:    hec.URL(),
662 662
 			splunkTokenKey:  hec.token,
... ...
@@ -669,12 +669,12 @@ func TestRawFormatWithoutTag(t *testing.T) {
669 669
 		ContainerImageName: "container_image_name",
670 670
 	}
671 671
 
672
-	hostname, err := ctx.Hostname()
672
+	hostname, err := info.Hostname()
673 673
 	if err != nil {
674 674
 		t.Fatal(err)
675 675
 	}
676 676
 
677
-	loggerDriver, err := New(ctx)
677
+	loggerDriver, err := New(info)
678 678
 	if err != nil {
679 679
 		t.Fatal(err)
680 680
 	}
... ...
@@ -773,7 +773,7 @@ func TestBatching(t *testing.T) {
773 773
 
774 774
 	go hec.Serve()
775 775
 
776
-	ctx := logger.Context{
776
+	info := logger.Info{
777 777
 		Config: map[string]string{
778 778
 			splunkURLKey:   hec.URL(),
779 779
 			splunkTokenKey: hec.token,
... ...
@@ -784,7 +784,7 @@ func TestBatching(t *testing.T) {
784 784
 		ContainerImageName: "container_image_name",
785 785
 	}
786 786
 
787
-	loggerDriver, err := New(ctx)
787
+	loggerDriver, err := New(info)
788 788
 	if err != nil {
789 789
 		t.Fatal(err)
790 790
 	}
... ...
@@ -839,7 +839,7 @@ func TestFrequency(t *testing.T) {
839 839
 
840 840
 	go hec.Serve()
841 841
 
842
-	ctx := logger.Context{
842
+	info := logger.Info{
843 843
 		Config: map[string]string{
844 844
 			splunkURLKey:   hec.URL(),
845 845
 			splunkTokenKey: hec.token,
... ...
@@ -850,7 +850,7 @@ func TestFrequency(t *testing.T) {
850 850
 		ContainerImageName: "container_image_name",
851 851
 	}
852 852
 
853
-	loggerDriver, err := New(ctx)
853
+	loggerDriver, err := New(info)
854 854
 	if err != nil {
855 855
 		t.Fatal(err)
856 856
 	}
... ...
@@ -920,7 +920,7 @@ func TestOneMessagePerRequest(t *testing.T) {
920 920
 
921 921
 	go hec.Serve()
922 922
 
923
-	ctx := logger.Context{
923
+	info := logger.Info{
924 924
 		Config: map[string]string{
925 925
 			splunkURLKey:   hec.URL(),
926 926
 			splunkTokenKey: hec.token,
... ...
@@ -931,7 +931,7 @@ func TestOneMessagePerRequest(t *testing.T) {
931 931
 		ContainerImageName: "container_image_name",
932 932
 	}
933 933
 
934
-	loggerDriver, err := New(ctx)
934
+	loggerDriver, err := New(info)
935 935
 	if err != nil {
936 936
 		t.Fatal(err)
937 937
 	}
... ...
@@ -994,7 +994,7 @@ func TestVerify(t *testing.T) {
994 994
 	hec.simulateServerError = true
995 995
 	go hec.Serve()
996 996
 
997
-	ctx := logger.Context{
997
+	info := logger.Info{
998 998
 		Config: map[string]string{
999 999
 			splunkURLKey:   hec.URL(),
1000 1000
 			splunkTokenKey: hec.token,
... ...
@@ -1005,7 +1005,7 @@ func TestVerify(t *testing.T) {
1005 1005
 		ContainerImageName: "container_image_name",
1006 1006
 	}
1007 1007
 
1008
-	_, err := New(ctx)
1008
+	_, err := New(info)
1009 1009
 	if err == nil {
1010 1010
 		t.Fatal("Expecting driver to fail, when server is unresponsive")
1011 1011
 	}
... ...
@@ -1023,7 +1023,7 @@ func TestSkipVerify(t *testing.T) {
1023 1023
 	hec.simulateServerError = true
1024 1024
 	go hec.Serve()
1025 1025
 
1026
-	ctx := logger.Context{
1026
+	info := logger.Info{
1027 1027
 		Config: map[string]string{
1028 1028
 			splunkURLKey:              hec.URL(),
1029 1029
 			splunkTokenKey:            hec.token,
... ...
@@ -1035,7 +1035,7 @@ func TestSkipVerify(t *testing.T) {
1035 1035
 		ContainerImageName: "container_image_name",
1036 1036
 	}
1037 1037
 
1038
-	loggerDriver, err := New(ctx)
1038
+	loggerDriver, err := New(info)
1039 1039
 	if err != nil {
1040 1040
 		t.Fatal(err)
1041 1041
 	}
... ...
@@ -1105,7 +1105,7 @@ func TestBufferMaximum(t *testing.T) {
1105 1105
 	hec.simulateServerError = true
1106 1106
 	go hec.Serve()
1107 1107
 
1108
-	ctx := logger.Context{
1108
+	info := logger.Info{
1109 1109
 		Config: map[string]string{
1110 1110
 			splunkURLKey:              hec.URL(),
1111 1111
 			splunkTokenKey:            hec.token,
... ...
@@ -1117,7 +1117,7 @@ func TestBufferMaximum(t *testing.T) {
1117 1117
 		ContainerImageName: "container_image_name",
1118 1118
 	}
1119 1119
 
1120
-	loggerDriver, err := New(ctx)
1120
+	loggerDriver, err := New(info)
1121 1121
 	if err != nil {
1122 1122
 		t.Fatal(err)
1123 1123
 	}
... ...
@@ -1194,7 +1194,7 @@ func TestServerAlwaysDown(t *testing.T) {
1194 1194
 	hec.simulateServerError = true
1195 1195
 	go hec.Serve()
1196 1196
 
1197
-	ctx := logger.Context{
1197
+	info := logger.Info{
1198 1198
 		Config: map[string]string{
1199 1199
 			splunkURLKey:              hec.URL(),
1200 1200
 			splunkTokenKey:            hec.token,
... ...
@@ -1206,7 +1206,7 @@ func TestServerAlwaysDown(t *testing.T) {
1206 1206
 		ContainerImageName: "container_image_name",
1207 1207
 	}
1208 1208
 
1209
-	loggerDriver, err := New(ctx)
1209
+	loggerDriver, err := New(info)
1210 1210
 	if err != nil {
1211 1211
 		t.Fatal(err)
1212 1212
 	}
... ...
@@ -1253,7 +1253,7 @@ func TestCannotSendAfterClose(t *testing.T) {
1253 1253
 	hec := NewHTTPEventCollectorMock(t)
1254 1254
 	go hec.Serve()
1255 1255
 
1256
-	ctx := logger.Context{
1256
+	info := logger.Info{
1257 1257
 		Config: map[string]string{
1258 1258
 			splunkURLKey:   hec.URL(),
1259 1259
 			splunkTokenKey: hec.token,
... ...
@@ -1264,7 +1264,7 @@ func TestCannotSendAfterClose(t *testing.T) {
1264 1264
 		ContainerImageName: "container_image_name",
1265 1265
 	}
1266 1266
 
1267
-	loggerDriver, err := New(ctx)
1267
+	loggerDriver, err := New(info)
1268 1268
 	if err != nil {
1269 1269
 		t.Fatal(err)
1270 1270
 	}
... ...
@@ -87,30 +87,30 @@ func rfc5424microformatterWithAppNameAsTag(p syslog.Priority, hostname, tag, con
87 87
 // New creates a syslog logger using the configuration passed in on
88 88
 // the context. Supported context configuration variables are
89 89
 // syslog-address, syslog-facility, syslog-format.
90
-func New(ctx logger.Context) (logger.Logger, error) {
91
-	tag, err := loggerutils.ParseLogTag(ctx, loggerutils.DefaultTemplate)
90
+func New(info logger.Info) (logger.Logger, error) {
91
+	tag, err := loggerutils.ParseLogTag(info, loggerutils.DefaultTemplate)
92 92
 	if err != nil {
93 93
 		return nil, err
94 94
 	}
95 95
 
96
-	proto, address, err := parseAddress(ctx.Config["syslog-address"])
96
+	proto, address, err := parseAddress(info.Config["syslog-address"])
97 97
 	if err != nil {
98 98
 		return nil, err
99 99
 	}
100 100
 
101
-	facility, err := parseFacility(ctx.Config["syslog-facility"])
101
+	facility, err := parseFacility(info.Config["syslog-facility"])
102 102
 	if err != nil {
103 103
 		return nil, err
104 104
 	}
105 105
 
106
-	syslogFormatter, syslogFramer, err := parseLogFormat(ctx.Config["syslog-format"], proto)
106
+	syslogFormatter, syslogFramer, err := parseLogFormat(info.Config["syslog-format"], proto)
107 107
 	if err != nil {
108 108
 		return nil, err
109 109
 	}
110 110
 
111 111
 	var log *syslog.Writer
112 112
 	if proto == secureProto {
113
-		tlsConfig, tlsErr := parseTLSConfig(ctx.Config)
113
+		tlsConfig, tlsErr := parseTLSConfig(info.Config)
114 114
 		if tlsErr != nil {
115 115
 			return nil, tlsErr
116 116
 		}