Достаточно распечатать вывод JSON из Spring конечных точек исполнительного механизма
Spring Оператор загрузки предоставляет несколько конечных точек для монитора приложения как:
/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}
Это штраф для потребления компьютера, но трудно читается людьми.
Я хотел бы форматировать (т.е. довольно печатать) вывод JSON конечных точек Spring Boot Actuator, чтобы упростить их для чтения операциями personel.
Что-то вроде:
{
"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
но этот параметр не повлиял на выход Actuator.
Есть ли конфигурация до разрешить печать выходного файла Spring JUON?
UPDATE:
Официальный образец работает для меня.
Важно следить за комментариями @DaveSyer: свойство для установки -
http.mappers.jsonPrettyPrint=true
Следствие продолжается.
Тем временем я использую json pretty print командной строки как обходной путь:
Установите jsonpp (например, для OS X):
brew install 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,
...
}
Ответы
Ответ 1
В соответствии с http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper официальный способ включения красивой печати с помощью Jackson в Spring Boot (по крайней мере, 1.2.2) для установки следующего свойства:
# Pretty-print JSON responses
spring.jackson.serialization.indent_output=true
Ответ 2
Свойство "http.mappers" работает для меня, но я думаю, что вам может понадобиться его верблюд ( "jsonPrettyPrint" ).
Ответ 3
Для Spring Загрузка 1.5.1 У меня в файле YML:
spring:
jackson:
serialization:
INDENT_OUTPUT: true
@BertrandRenuart ответ был самым близким, но по IDE не видел indent_output как правильно.
Ответ 4
Выполните следующие действия:
@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, а не только связанные с приводом элементы.
UPDATE
Ответ от @DaveSyer, очевидно, лучше! Я не нашел объект HttpMapperProperties
, который используется для настройки Jackson. Это это Javadoc
Ответ 5
С 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.
Ответ 6
Я использую обычно установленный Python модуль json.tool
:
curl --silent http://localhost:8080/metrics | python -mjson.tool
Ответ 7
К сожалению, свойство приложения
spring.jackson.serialization.INDENT_OUTPUT
не работал у меня (spring загрузочные версии с 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)
Ответ 8
Вот моя функция 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
.
Ответ 9
Я использую jq
для печати JSON, а также для его фильтрации. Это в основном sed
для JSON. На маке он может быть установлен с доморощенным. (https://stedolan.github.io/jq/)
curl http://localhost:8080/metrics | jq
Ответ 10
На самом деле я хотел сделать то же самое. Но потом я спросил: почему? Чтобы лучше отладить мой сервис, который поставляется с небольшим штрафом за производительность.
Просто используйте расширение браузера, как этот:), чтобы получить представление, подобное этому
![введите описание изображения здесь]()