我有一个包含 1 个容器的容器化应用程序。在那个容器中我有多个 Pod。
为了简单起见,我们选择 3 个 Pod。 POD1(pod id 为 pd1)、POD2(pd2)、POD3(pd3)
在 log4j.yml 文件中,我将应用程序日志文件配置为:
fileName: "logs/app.log"
它的作用是在该容器中 pod 的每个实例中生成 app.log 文件。
logs
目录中 app.log 存在logs
目录中 app.log 存在logs
目录中 app.log 存在logs
目录中我们应该有 app_pd1.loglogs
目录中我们应该有 app_pd2.loglogs
目录中我们应该有 app_pd3.log我试过了
fileName: "logs/app_${k8s:podId}.log"
但是它不起作用,该文件是在所有 pod 中使用静态名称
app_${k8s:podId}.log
制作的。
要覆盖 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