根据 official resource,日志配置依赖于 application.properties 文件。
现在我需要根据使用的集群进行几个配置(假设我们有典型的开发、暂存和生产环境,因此开发应该有一个调试级别和至少是 INFO 的生产)。
起初我想使用 Kubernetes ConfigMaps,但我看不到与 quarkus 日志记录的任何联系。
我该如何解决这个问题?
编辑:
这是我的 ConfigMap
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-cm-config-map
namespace: default
uid: d992d86f-c247-471d-8e31-53e9a1858b76
resourceVersion: '8484'
creationTimestamp: '2021-04-22T13:12:43Z'
managedFields:
- manager: kubectl-create
operation: Update
apiVersion: v1
time: '2021-04-22T13:12:43Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
.: {}
'f:myenv': {}
'f:myname': {}
- manager: kubectl-edit
operation: Update
apiVersion: v1
time: '2021-04-22T16:52:18Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:log.file.level': {}
- manager: dashboard
operation: Update
apiVersion: v1
time: '2021-04-23T08:03:06Z'
fieldsType: FieldsV1
fieldsV1:
'f:data':
'f:quarkus.log.file.level': {}
data:
log.file.level: DEBUG
myenv: cl1
myname: cluster1
quarkus.log.file.level: DEBUG
编辑2
这是我的配置图(通过命令 kubectl edit cm ):
apiVersion: v1
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
myenv: cl1
myname: cluster 1b
kind: ConfigMap
metadata:
creationTimestamp: "2021-04-22T13:12:43Z"
name: kube-cm-config-map
namespace: default
resourceVersion: "39810"
uid: d992d86f-c247-471d-8e31-53e9a1858b76
答案 0 :(得分:0)
在 Quarkus 中有两种方法可以使用 ConfigMap
来读取运行时配置。
第一个是让 Quarkus 使用 here 描述的 quarkus-kubernetes-config
扩展来查询 API 服务器。
配置 Kubernetes Deployment
以将 ConfigMap
值转换为 Pod 的环境变量的第二种方法。这可以通过 here 中描述的 quarkus-kubernetes
扩展完成。
因此,您将在 ConfigMap 中添加适当的 quarkus 日志配置(即键值对),然后使用上述方法之一在运行时使用它
答案 1 :(得分:0)
如果您使用 Kubernetes 资源 yaml 来部署您的应用程序,请使用以下代码段将您的自定义 ConfigMap 作为环境变量推送到您的应用程序 (https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables):
spec:
containers:
- name:
image:
envFrom:
- configMapRef:
name: kube-cm-config-map
为每个环境使用不同的 ConfigMap,但名称相同。如果您的环境(dev/qa/etc)是 Kubernetes 命名空间,那么设置起来非常容易。只需复制每个命名空间中的 ConfigMap,并更改每个命名空间中的日志级别值即可。
此外,将 ConfigMap 属性的命名约定从 log.file.level
更改为 LOG_FILE_LEVEL
见https://quarkus.io/guides/config-reference#environment_variables
答案 2 :(得分:0)
可以通过以下方式编辑cm解决:
data:
QUARKUS_LOG_FILE_ENABLE: "true"
QUARKUS_LOG_FILE_FORMAT: '%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n'
QUARKUS_LOG_FILE_LEVEL: ERROR
QUARKUS_LOG_FILE_PATH: /tmp/kube-cm.log
然后我在 quarkus 上设置 application.properties:
quarkus.kubernetes.env.configmaps=kube-cm-config-map