尝试使用toYaml
获取log4j2节表单values.yml,但它没有保留顺序。
log4j2.yml: |-
{{ toYaml .Values.log4j2 | indent 4 }}
输出-
log4j2:
Configuration:
Appenders:
Console:
Filters:
DuplicateLogFilter:
ttlInSeconds: 60
MarkerFilter:
marker: TRACE
onMatch: ACCEPT
onMismatch: NEUTRAL
PatternLayout:
pattern: '%-5p | %d{yyyy-MM-dd HH:mm:ss,SSS} | [%t] [%X{AD.requestGUID}] [%X{trace.id}]
%x %c{1.}:%L - %m%n'
name: CONSOLE
target: SYSTEM_OUT
monitorInterval: 300
shutdownHook: disable
预期输出-
log4j2:
Configuration:
monitorInterval: 300
shutdownHook: disable
Appenders:
Console:
name: CONSOLE
target: SYSTEM_OUT
Filters:
MarkerFilter:
marker: TRACE
onMatch: ACCEPT
onMismatch: NEUTRAL
DuplicateLogFilter:
ttlInSeconds: 60
PatternLayout:
pattern: "%-5p | %d{yyyy-MM-dd HH:mm:ss,SSS} | [%t] [%X{AD.requestGUID}] [%X{trace.id}] %x %c{1.}:%L - %m%n"
值文件被解析为映射(或者字典,如果你愿意的话(,并且通常不需要映射结构来保持字段顺序。因此,您的问题不是toYaml
函数本身的问题,而是在values.yaml
中放置log4j配置的问题。
您可以做的是将您的log4j配置移动到一个单独的log4j2.yml文件中(在图表的根目录中(,并将其作为原始文件包含:
log4j2.yml: |-
{{- .Files.Get "log4j2.yml" | nindent 10 }}
(相应调整缩进(
我绕过了Log4j2的怪癖,提取了Log4j2强制执行订单的项目,然后输出Configuration
,并使用omit
函数提交这些项目。
Configuration:
packages: {{ .Values.log4j2.Configuration.packages | toYaml }}
Appenders: {{ .Values.log4j2.Configuration.Appenders | toYaml | nindent 4 }}
{{- $theRest := omit .Values.log4j2.Configuration "packages" "Appenders" }}
{{ $theRest | toYaml | indent 2 }}
PS:虽然packages
必须在引用之前,但没有这样的要求适用于Appenders
AFAIK——我只是把Appenders
放进去说明