如何使 Keycloak 4.5.0.Final 以JSON格式登录?
我正在使用Helm chart在Kubernetes中运行Keycloak,该图表提供了运行JBoss CLI脚本(keycloak.cli.custom
)或shell脚本(keycloak.preStartScript
)的钩子。
但我希望避免定制Docker镜像。
如何使 Keycloak 4.5.0.Final 以JSON格式登录?
我正在使用Helm chart在Kubernetes中运行Keycloak,该图表提供了运行JBoss CLI脚本(keycloak.cli.custom
)或shell脚本(keycloak.preStartScript
)的钩子。
但我希望避免定制Docker镜像。
# Undertow HTTP Server Configuration
echo Started configuring Undertow ....
# Create a new log formatter to output json with full stacktrace details
/subsystem=logging/json-formatter=SUMO_FORMATTER:add(pretty-print=false, exception-output-type=detailed-and-formatted, print-details=false)
# Disable the original console output that was in plain text format
/subsystem=logging/console-handler=CONSOLE/:write-attribute(name=enabled,value=false)
# Create a new console logger that uses the new json formatter
/subsystem=logging/console-handler=SUMO_CONSOLE:add(enabled=true, named-formatter=SUMO_FORMATTER)
# Make the root logger use the new console logger
/subsystem=logging/root-logger=ROOT/:write-attribute(name=handlers,value=["SUMO_CONSOLE"])
echo ... Completed configuring Undertow
这里有一些相关文档
根据这篇很棒的文章(也链接到Github),按照以下步骤,可以实现JSON日志:
deployments
文件夹中(请遵循文章获取完整细节)最终代码可能如下所示:
public class MyEventListenerProvider implements EventListenerProvider {
public MyEventListenerProvider() {
// use c'tor to init variables / connections / etc. - plugin load hook
this.jsonMapper = new ObjectMapper();
}
ObjectMapper jsonMapper;
private stringify(Object obj) {
try {
return this.jsonMapper.writeValueAsString(obj);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public void onEvent(Event event) {
System.out.println(this.stringify(event));
}
@Override
public void onEvent(AdminEvent adminEvent, boolean b) {
System.out.println(this.stringify(adminEvent));
}
@Override
public void close() {
// use close to close connections / reset variables - plugin unload hook
}
这个示例是即时编写的(如果有编译错误,请原谅),并使用Jackson库,如此处所述,将Java对象转换为JSON字符串。
您可以在启动时使用一个选项启用JSON日志记录,如此处所述:
bin/kc.[sh|bat] start --log-console-output=json