我想根据服务器启动时环境变量的值启用 WildFly 的
json-formatter
进行日志记录。
当服务器已启动并且我通过
jboss-cli.sh
连接到它时,以下 CLI 命令可以正常工作。但是如何在启动服务器时控制此配置是否处于活动状态?
if (result == "true") of :resolve-expression(expression=${env.JSON_FORMATTER_ENABLED})
/subsystem=logging/json-formatter=JSON:add(pretty-print=false, exception-output-type=formatted)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value="JSON")
end-if
如果这是最好的解决方案,我不会抱怨,但至少这是我能想到的最好的解决方案。
我添加了第二个
console-handler
,它使用了json-formatter
:
# add separate console-handler with json-formatter
/subsystem=logging/json-formatter=JSON:add(pretty-print=false, exception-output-type=formatted)
/subsystem=logging/console-handler=CONSOLE-JSON:add(named-formatter="JSON", level=INFO)
/subsystem=logging/root-logger=ROOT:add-handler(name=CONSOLE-JSON)
然后,根据环境变量,我启用/禁用相应的
console-handler
,因为它似乎是唯一支持表达式的 WildFly 资源:
/subsystem=logging/console-handler=CONSOLE-JSON:write-attribute(name=enabled, value="${env.JSON_CONSOLE_HANDLER_ENABLED}"
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=enabled, value="${env.DEFAULT_CONSOLE_HANDLER_ENABLED}"
最后,在我的 Docker 启动脚本中
docker-entrypoint.sh
:
if [ "${JSON_FORMATTER_ENABLED}" == "true" ]; then
export JSON_CONSOLE_HANDLER_ENABLED="true"
export DEFAULT_CONSOLE_HANDLER_ENABLED="false"
else
export JSON_CONSOLE_HANDLER_ENABLED="false"
export DEFAULT_CONSOLE_HANDLER_ENABLED="true"
fi