根据容器化应用的podId获取动态应用日志文件名

问题描述 投票:0回答:1

我有一个包含 1 个容器的容器化应用程序。在那个容器中我有多个 Pod。

为了简单起见,我们选择 3 个 Pod。 POD1(pod id 为 pd1)、POD2(pd2)、POD3(pd3)

在 log4j.yml 文件中,我将应用程序日志文件配置为:

fileName: "logs/app.log"

它的作用是在该容器中 pod 的每个实例中生成 app.log 文件。

  • POD1 -> 在
    logs
    目录中 app.log 存在
  • POD2 -> 在
    logs
    目录中 app.log 存在
  • POD3 -> 在
    logs
    目录中 app.log 存在

但我希望文件是这样的:

  • POD1 -> 在
    logs
    目录中我们应该有 app_pd1.log
  • POD2 -> 在
    logs
    目录中我们应该有 app_pd2.log
  • POD3 -> 在
    logs
    目录中我们应该有 app_pd3.log

我尝试过的:

Log4j Kubernetes 支持

中所述

我试过了

fileName: "logs/app_${k8s:podId}.log"

但是它不起作用,该文件是在所有 pod 中使用静态名称

app_${k8s:podId}.log
制作的。

docker kubernetes logging log4j
1个回答
0
投票

要覆盖 log4j 或应用程序 yml/property 中的任何值,您可以使用 JVM 参数。
喜欢

java -jar -Dlog_path=${LOG_FILE_PATH} app.jar
或将
LOG_FILE_PATH
设置为
log4j
中的变量。 然后使用
env
部分

从清单中进行设置
    - name: LOG_FILE_PATH
      value: logs/app_${POD_NAME}.log

    - name: POD_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name
© www.soinside.com 2019 - 2024. All rights reserved.