Logging plugins use the same HTTP interface as other plugins for basic
command operations meanwhile actual logging operations are handled (on
Unix) via a fifo.
The plugin interface looks like so:
```go
type loggingPlugin interface {
StartLogging(fifoPath string, loggingContext Context) error
StopLogging(fifoPath)
```
This means a plugin must implement `LoggingDriver.StartLogging` and
`LoggingDriver.StopLogging` endpoints and be able to consume the passed
in fifo.
Logs are sent via stream encoder to the fifo encoded with protobuf.
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Upstream-commit: 27bd6842f8518780b99fdb42f8e7f84c17856d87
Component: engine
28 lines
774 B
Go
28 lines
774 B
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/docker/docker/integration-cli/checker"
|
|
"github.com/go-check/check"
|
|
)
|
|
|
|
func (s *DockerSuite) TestPluginLogDriver(c *check.C) {
|
|
testRequires(c, IsAmd64, DaemonIsLinux)
|
|
|
|
pluginName := "cpuguy83/docker-logdriver-test:latest"
|
|
|
|
dockerCmd(c, "plugin", "install", pluginName)
|
|
dockerCmd(c, "run", "--log-driver", pluginName, "--name=test", "busybox", "echo", "hello")
|
|
out, _ := dockerCmd(c, "logs", "test")
|
|
c.Assert(strings.TrimSpace(out), checker.Equals, "hello")
|
|
|
|
dockerCmd(c, "start", "-a", "test")
|
|
out, _ = dockerCmd(c, "logs", "test")
|
|
c.Assert(strings.TrimSpace(out), checker.Equals, "hello\nhello")
|
|
|
|
dockerCmd(c, "rm", "test")
|
|
dockerCmd(c, "plugin", "disable", pluginName)
|
|
dockerCmd(c, "plugin", "rm", pluginName)
|
|
}
|