Spring Boot Actuator 为监控 应用程序提供了几个端点:
/metrics
/beans
/health
...
使用以下方法检查端点:
curl http://localhost:8080/metrics
结果:
{"counter.status.200.env":1,"counter.status.200.health":1,"counter.status.200.info":2,"counter.status.200.metrics":2,"gauge.response.env":5.0,"gauge.response.health":22.0,"gauge.response.info":1.0,"gauge.response.metrics":1.0,"mem":1030144,"mem.free":56118,"processors":8,"uptime":5108095,"instance.uptime":5102906,"heap.committed":1030144,"heap.init":262144,"heap.used":974031,"heap":3728384,"threads.peak":81,"threads.daemon":21,"threads":77,"classes":8854,"classes.loaded":8860,"classes.unloaded":6,"gc.ps_scavenge.count":119,"gc.ps_scavenge.time":7223,"gc.ps_marksweep.count":12,"gc.ps_marksweep.time":17573}
很好用于机器消费但难以阅读 人。
我想格式化(即漂亮打印) Spring Boot Actuator 端点的 JSON 输出,以便于阅读由操作人员。
类似的东西:
{
"counter.status.200.env":1,
"counter.status.200.health":1,
"counter.status.200.info":2,
"counter.status.200.metrics":2,
"gauge.response.env":5.0,
"gauge.response.health":22.0,
"gauge.response.info":1.0,
...
}
我尝试过设置
http.mappers.json-pretty-print=true
但此设置不会影响执行器输出。
弹簧启动执行器JSON 输出的启用漂亮打印是配置吗?
更新
official sample对我有用。
遵循@DaveSyer的评论非常重要:要设置的属性是
http.mappers.jsonPrettyPrint=true
调查仍在进行中。
与此同时,我使用json pretty print 命令行作为解决方法:
安装jsonpp(例如OS X):
brew install jsonpp
然后通过jsonpp管理curl输出,jsonpp可以动态格式化json文件:
curl http://localhost:8080/metrics | jsonpp
结果:
{
"counter.status.200.env": 1,
"counter.status.200.health": 1,
"counter.status.200.info": 2,
"counter.status.200.metrics": 2,
...
}
答案 0 :(得分:47)
根据http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper,在Spring Boot(至少1.2.2)中使用Jackson启用漂亮打印的官方方法是设置以下属性:
# Pretty-print JSON responses
spring.jackson.serialization.indent_output=true
答案 1 :(得分:13)
对于Spring Boot 1.5.1,我有我的YML文件:
spring:
jackson:
serialization:
INDENT_OUTPUT: true
@BertrandRenuart答案是最接近的,但是IDE没有看到indent_output是正确的。
答案 2 :(得分:10)
“http.mappers”属性对我有用,但我认为你可能需要它来自驼峰(“jsonPrettyPrint”)。
答案 3 :(得分:7)
执行以下操作:
@Configuration
public class JacksonConfig {
@Autowired
private ObjectMapper objectMapper; //reuse the pre-configured mapper
@PostConstruct
public void setup() {
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
//whatever else you need
}
}
这是有效的,因为Spring Boot使用ObjectMapper
bean来执行所有与JSON相关的操作。
但请注意,此配置将打印所有JSON输出,而不仅仅是与执行器相关的内容。
<强>更新强>
@DaveSyer的答案显然更好!我还没找到用于配置Jackson的HttpMapperProperties
对象。 This是Javadoc
答案 4 :(得分:4)
答案 5 :(得分:3)
我使用Python常用的json.tool
模块:
curl --silent http://localhost:8080/metrics | python -mjson.tool
答案 6 :(得分:2)
使用spring-boot 1.2.6,您需要使用:
spring.jackson.serialization.INDENT_OUTPUT=true
使用旧的http.mappers时来自我的日志。*:
http.mappers.json-pretty-print is deprecated. If you are using Jackson, spring.jackson.serialization.INDENT_OUTPUT=true should be used instead.
答案 7 :(得分:1)
我使用a
来打印JSON以及过滤它。对于JSON,它基本上是jq
。在Mac上,它可以与自制软件一起安装。 (https://stedolan.github.io/jq/)
sed
答案 8 :(得分:1)
而不是使用curl
我喜欢使用httpie
作为http命令行客户端:
http http://localhost:8080/metrics
这已经格式化并且语法突出显示json响应,而不必将输出传递给另一个命令。命令语法也更加人性化。
答案 9 :(得分:1)
如果您在Spring中使用 gson 序列化,那么其他任何答案都不适合您。您必须使用此配置选项:
spring.gson.pretty-printing=true
从版本2.0.3.Release
确认使用Spring Boot。
答案 10 :(得分:0)
不幸的是,应用程序属性
spring.jackson.serialization.INDENT_OUTPUT
对我没用(春季启动版本1.2.6到1.4.0.RELEASE)。相反,在我的 WebMvcConfigurerAdapter 的扩展中,我覆盖了 configureMessageConverters()并添加了我自己的Jackson2ObjectMapperBuilder:
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
...
private MappingJackson2HttpMessageConverter jacksonMessageConverter() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS,
SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS)
.featuresToEnable(SerializationFeature.INDENT_OUTPUT).modulesToInstall(hibernate4Module());
// can use this instead of featuresToEnable(...)
builder.indentOutput(true);
return new MappingJackson2HttpMessageConverter(builder.build());
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(jacksonMessageConverter());
super.configureMessageConverters(converters);
}
...
}
这似乎是我在Spring boot 1.4.0.RELEASE上的技巧,我的执行器输出现在已经打印出来了(以及其他所有json输出)
答案 11 :(得分:0)
这是我的Emacs函数,用于从端点检索Spring Actuator Json:
(defvar my/spring-actuator-server-history nil)
(defvar my/spring-actuator-last-server "http://localhost:8080")
(defvar my/spring-actuator-path-history nil)
(defvar my/spring-actuator-path-completion
'("actuator" "auditevents" "autoconfig" "beans" "configprops" "dump" "env" "flyway" "health" "heapdump"
"info" "jolokia" "liquibase" "logfile" "loggers" "mappings" "metrics" "shutdown" "trace")))
(defun my/spring-actuator (server path)
(interactive (list (read-string "Server: " my/spring-actuator-last-server 'my/spring-actuator-server-history)
(completing-read "Path: " my/spring-actuator-path-completion nil nil "" 'my/spring-actuator-path-history)))
(setq my/spring-actuator-last-server server)
(let ( (bufname (format "actuator: %s" path)) )
(when (get-buffer bufname)
(kill-buffer bufname))
(switch-to-buffer (url-retrieve-synchronously (format "%s/%s" server path)))
(rename-buffer bufname)
(goto-char (point-min))
(re-search-forward "^$" nil 'move)
(forward-char)
(delete-region (point-min) (point))
(json-pretty-print-buffer)
(json-mode) ))
如果您不喜欢依赖外部json-mode
库,请将其替换为js-mode
。
答案 12 :(得分:0)
万一使用Spring Boot 2(在我的情况下为2.1.1)的人像我一样偶然发现了这个问题:我们也遇到了同样的问题,而对于2.1.1来说,答案都无济于事。
所以我们要做的是用一个新端点替换现有端点(在我们的例子中为health
)。我在this answer的末尾描述了它。是的,这将我们的解决方案限制在该单个端点上,但是另一方面,它的优点是能够以您想要的任何方式格式化输出-包括漂亮的打印JSON,如果需要(也可以通过服务输出,则输出样式化的HTML)浏览器中的技术人员)。请注意produces
的{{1}}属性。
答案 13 :(得分:-1)
这不起作用
spring.jackson.serialization.INDENT_OUTPUT=true
这有效spring.jackson.serialization.indent-output=true