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>
| ... | ... |
@@ -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 |
} |