summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXueyuan Chen <x.chen-47@student.tudelft.nl>2022-02-26 23:07:25 +0100
committerXueyuan Chen <X.Chen-47@student.tudelft.nl>2022-03-01 00:18:39 +0100
commit40c6192e9e3da7f2f3f54365c89b4b837ed74fd8 (patch)
treeb3e4505fbcac2d9e9f2ec99bf4401d56483f7546
parentc39dffe83db9fa3cfa6897b971956821f1bbcce2 (diff)
downloadpodman-40c6192e9e3da7f2f3f54365c89b4b837ed74fd8.tar.gz
podman-40c6192e9e3da7f2f3f54365c89b4b837ed74fd8.tar.bz2
podman-40c6192e9e3da7f2f3f54365c89b4b837ed74fd8.zip
Add the names flag for pod logs
Fixes containers#13261 Signed-off-by: Xueyuan Chen <X.Chen-47@student.tudelft.nl>
-rw-r--r--cmd/podman/pods/logs.go1
-rw-r--r--docs/source/markdown/podman-pod-logs.1.md4
-rw-r--r--libpod/container_log_linux.go7
-rw-r--r--test/e2e/logs_test.go33
4 files changed, 42 insertions, 3 deletions
diff --git a/cmd/podman/pods/logs.go b/cmd/podman/pods/logs.go
index 1b00f047e..e35b48bed 100644
--- a/cmd/podman/pods/logs.go
+++ b/cmd/podman/pods/logs.go
@@ -87,6 +87,7 @@ func logsFlags(cmd *cobra.Command) {
flags.Int64Var(&logsPodOptions.Tail, tailFlagName, -1, "Output the specified number of LINES at the end of the logs.")
_ = cmd.RegisterFlagCompletionFunc(tailFlagName, completion.AutocompleteNone)
+ flags.BoolVarP(&logsPodOptions.Names, "names", "n", false, "Output container names instead of container IDs in the log")
flags.BoolVarP(&logsPodOptions.Timestamps, "timestamps", "t", false, "Output the timestamps in the log")
flags.SetInterspersed(false)
_ = flags.MarkHidden("details")
diff --git a/docs/source/markdown/podman-pod-logs.1.md b/docs/source/markdown/podman-pod-logs.1.md
index 53aa5d58b..880853000 100644
--- a/docs/source/markdown/podman-pod-logs.1.md
+++ b/docs/source/markdown/podman-pod-logs.1.md
@@ -28,6 +28,10 @@ chance that the log file will be removed before `podman pod logs` reads the fina
Instead of providing the pod name or id, get logs of the last created pod. (This option is not available with the remote Podman client, including Mac and Windows (excluding WSL2) machines)
+#### **--names**, **-n**
+
+Output the container names instead of the container IDs in the log.
+
#### **--since**=*TIMESTAMP*
Show logs since TIMESTAMP. The --since option can be Unix timestamps, date formatted timestamps, or Go duration
diff --git a/libpod/container_log_linux.go b/libpod/container_log_linux.go
index 6150973ca..8ae8ff2c0 100644
--- a/libpod/container_log_linux.go
+++ b/libpod/container_log_linux.go
@@ -1,5 +1,5 @@
-//+build linux
-//+build systemd
+//go:build linux && systemd
+// +build linux,systemd
package libpod
@@ -235,6 +235,9 @@ func (c *Container) readFromJournal(ctx context.Context, options *logs.LogOption
logrus.Errorf("Failed parse log line: %v", err)
return
}
+ if options.UseName {
+ logLine.CName = c.Name()
+ }
if doTail {
tailQueue = append(tailQueue, logLine)
continue
diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go
index 7c0fcc8ee..cb795438d 100644
--- a/test/e2e/logs_test.go
+++ b/test/e2e/logs_test.go
@@ -37,7 +37,9 @@ var _ = Describe("Podman logs", func() {
}
podmanTest = PodmanTestCreate(tempdir)
podmanTest.Setup()
- podmanTest.SeedImages()
+ if err := podmanTest.SeedImages(); err != nil {
+ os.Exit(1)
+ }
})
AfterEach(func() {
@@ -412,4 +414,33 @@ var _ = Describe("Podman logs", func() {
logs.WaitWithDefaultTimeout()
Expect(logs).To(Not(Exit(0)))
})
+
+ It("podman pod logs with container names", func() {
+ SkipIfRemote("Remote can only process one container at a time")
+ SkipIfInContainer("journalctl inside a container doesn't work correctly")
+ podName := "testPod"
+ containerName1 := "container1"
+ containerName2 := "container2"
+
+ testPod := podmanTest.Podman([]string{"pod", "create", fmt.Sprintf("--name=%s", podName)})
+ testPod.WaitWithDefaultTimeout()
+ Expect(testPod).To(Exit(0))
+
+ log1 := podmanTest.Podman([]string{"run", "--name", containerName1, "-d", "--pod", podName, BB, "/bin/sh", "-c", "echo log1"})
+ log1.WaitWithDefaultTimeout()
+ Expect(log1).To(Exit(0))
+
+ log2 := podmanTest.Podman([]string{"run", "--name", containerName2, "-d", "--pod", podName, BB, "/bin/sh", "-c", "echo log2"})
+ log2.WaitWithDefaultTimeout()
+ Expect(log2).To(Exit(0))
+
+ results := podmanTest.Podman([]string{"pod", "logs", "--names", podName})
+ results.WaitWithDefaultTimeout()
+ Expect(results).To(Exit(0))
+
+ output := results.OutputToStringArray()
+ Expect(output).To(HaveLen(2))
+ Expect(output).To(ContainElement(ContainSubstring(containerName1)))
+ Expect(output).To(ContainElement(ContainSubstring(containerName2)))
+ })
})