mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
podman logs k8s-file: do not reassemble partial log lines
The backend should not convert partial lines to full log lines. While this works for most cases it cannot work when the last line is partial since it will just be lost. The frontend logic can already display partial lines correctly. The journald driver also works correctly since it does not such conversion. Fixes #14458 Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
@ -75,7 +75,6 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption
|
||||
go func() {
|
||||
defer options.WaitGroup.Done()
|
||||
|
||||
var partial string
|
||||
for line := range t.Lines {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
@ -89,13 +88,6 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption
|
||||
logrus.Errorf("Getting new log line: %v", err)
|
||||
continue
|
||||
}
|
||||
if nll.Partial() {
|
||||
partial += nll.Msg
|
||||
continue
|
||||
} else if !nll.Partial() && len(partial) > 0 {
|
||||
nll.Msg = partial + nll.Msg
|
||||
partial = ""
|
||||
}
|
||||
nll.CID = c.ID()
|
||||
nll.CName = c.Name()
|
||||
nll.ColorID = colorID
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"time"
|
||||
|
||||
. "github.com/containers/podman/v4/test/utils"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
. "github.com/onsi/ginkgo"
|
||||
. "github.com/onsi/gomega"
|
||||
. "github.com/onsi/gomega/gexec"
|
||||
@ -370,6 +371,26 @@ var _ = Describe("Podman logs", func() {
|
||||
Expect(results.OutputToString()).To(Equal("stdout"))
|
||||
Expect(results.ErrorToString()).To(Equal("stderr"))
|
||||
})
|
||||
|
||||
It("podman logs partial log lines: "+log, func() {
|
||||
skipIfJournaldInContainer()
|
||||
|
||||
cname := "log-test"
|
||||
content := stringid.GenerateNonCryptoID()
|
||||
// use printf to print no extra newline
|
||||
logc := podmanTest.Podman([]string{"run", "--log-driver", log, "--name", cname, ALPINE, "printf", content})
|
||||
logc.WaitWithDefaultTimeout()
|
||||
Expect(logc).To(Exit(0))
|
||||
// Important: do not use OutputToString(), this will remove the trailing newline from the output.
|
||||
// However this test must make sure that there is no such extra newline.
|
||||
Expect(string(logc.Out.Contents())).To(Equal(content))
|
||||
|
||||
logs := podmanTest.Podman([]string{"logs", cname})
|
||||
logs.WaitWithDefaultTimeout()
|
||||
Expect(logs).To(Exit(0))
|
||||
// see comment above
|
||||
Expect(string(logs.Out.Contents())).To(Equal(content))
|
||||
})
|
||||
}
|
||||
|
||||
It("using journald for container with container tag", func() {
|
||||
|
Reference in New Issue
Block a user