ApiBoot Logging
путем интеграцииminbox-logging
Для управления информацией журнала каждого запроса, включая头信息
,参数
,主体内容
,路径
, происходящий服务器
Сопутствующая информация и т. д., в соответствии со статусом ответа интерфейса, информация заголовка ответа, содержание ответа и ответ при возникновении исключения также могут быть записаны.堆栈信息
.
организация с открытым исходным кодом minbox-projects
“org.minbox.framework”
Стремление предоставить разработчикам ряд“开箱即用”
Фреймворк реализует решение.
посколькуApiBoot
Посадка рамы, внутренняя интеграция第三方插件(plugin)
Увеличение числа также привело кApiBoot
Исходный код слишком раздут, для этой проблемыminbox-projects
Организация с открытым исходным кодом родилась,ApiBoot
Первым вступит в организацию и будетApiBoot
интегрированный第三方插件
Разделяйте их один за другим и добавляйте каждый плагин как независимый проект с открытым исходным кодом.minbox-projects
Организация с открытым исходным кодом, которая облегчает отдельное обслуживание и обновление каждого проекта.
Домашняя страница организации:git ee.com/min-exploitation-pro т.е...
компонент журнала minbox-logging
minbox-logging
Компонент журналаminbox-projects
Член организации с открытым исходным кодом, являетсяРаспределенная, ненавязчивая среда анализа журнала запросов на основе ссылок.
Предоставляет конечную точку администратора для采集日志
,分析日志
,日志告警通知
,服务性能分析
Ждать. Просмотр в режиме реального времени через интерфейс администратора链路日志
информация, онлайн业务服务列表
, решатьrequest -> response
Анализ журнала и запись всего бизнес-запроса.
Исходный код компонента журнала Minbox-logging:git ee.com/min-exploitation-pro т.е...
Создайте пример проекта
пройти черезidea
инструменты разработчика для созданияSpringBoot
проект.
- pom.xml зависимости
<!--配置参数-->
<properties>
<java.version>1.8</java.version>
<api.boot.version>2.1.4.RELEASE</api.boot.version>
</properties>
<dependencies>
<!--Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--ApiBoot Logging-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-logging</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<!--ApiBoot统一版本依赖-->
<dependencies>
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-dependencies</artifactId>
<type>pom</type>
<scope>import</scope>
<version>${api.boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
- тестовый контроллер
добавить тестLoggingSampleController
Контроллер, исходный код выглядит следующим образом:
/**
* 请求日志示例
*
* @author 恒宇少年
*/
@RestController
@RequestMapping(value = "/test")
public class LoggingSampleController {
/**
* 验证请求参数以及相应内容
*
* @param name
* @return
*/
@GetMapping
public String hello(@RequestParam("name") String name) {
return "你好:" + name;
}
/**
* 验证主体请求内容以及相应内容
*
* @param user
* @return
*/
@PostMapping
public String bodyHello(@RequestBody User user) {
return "你好:" + user.getName();
}
/**
* RequestBody 示例类
*/
@Data
public static class User {
private String name;
}
}
- application.yml
spring:
application:
name: apiboot-unified-manage-request-logs
server:
port: 8080
потому чтоApiBoot Logging
Информация о сервере, генерируемая журналом, должна быть записана, поэтомуspring.application.name
так же какserver.port
Эти два параметра должны быть настроены, иначе при запуске проекта будет выдано сообщение об ошибке.
- Аннотация @EnableLoggingClient
@SpringBootApplication
@EnableLoggingClient
public class ApibootUnifiedManageRequestLogsApplication {
public static void main(String[] args) {
SpringApplication.run(ApibootUnifiedManageRequestLogsApplication.class, args);
}
}
использовать@EnableLoggingClient
Аннотация для включения ведения журналаклиент, настроить аннотацию для класса входа, внутренне передатьImportBeanDefinitionRegistrar
зарегистрироватьсяminbox-logging-client
нужныйBean
.
Унифицированные зависимости версии ApiBoot
мы используемSpringBoot
Когда мы обнаружили, что в зависимостях, которые мы добавили, не нужно было указывать конкретные版本号
, это роль унифицированной зависимости версии, в основномMaven继承关系
причина.
существуетApiBoot
Есть еще такой модуль, который единообразно поддерживает зависимые версииapi-boot-dependencies
, исходный код этого модуля только одинpom.xml
файл, который в основном используется для настройки конкретной версии каждой сторонней зависимости или встроенной зависимости.
Проходим в проектpom.xml
Добавьте следующие зависимости управления версиями в файл конфигурации:
<dependencyManagement>
<!--ApiBoot统一版本依赖-->
<dependencies>
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-dependencies</artifactId>
<type>pom</type>
<scope>import</scope>
<version>${api.boot.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
Вы можете использовать его без указания номера версииApiBoot
Все зависимости предоставлены.
тестовый запрос
Проект готов, давайте сначала сдадим проектSpringBoot Application
способ начать, через следующееcurl
Команда обращается к нашему тестовому интерфейсу:
curl http://localhost:8080/test\?name\=hengboy
После завершения доступа запрос выполнен успешно, но консоль не выводит никакой информации журнала запросов, но есть журнал предупреждений:
Not set 【LoggingAdminDiscovery】in LoggingFactoryBean,don't invoke report request logs.
Это предупреждение очень четкое, мы не настроилиlogging-admin
, поэтому отчет журнала не может быть выполнен Мы используем эту главу самостоятельно.ApiBoot Logging
log, поэтому это предупреждающее сообщение можно игнорировать.
журнал запросов на консольную печать
ApiBoot Logging
предоставляет конфигурациюapi.boot.logging.show-console-log
, значение по умолчанию для этой конфигурацииfalse
, благодаря этой конфигурации журнал запросов можно распечатать на консоли.
существуетapplication.yml
Конфигурация, добавленная в файл конфигурации, выглядит следующим образом:
api:
boot:
# ApiBoot Logging 日志组件配置
logging:
show-console-log: true
После добавленияперезапустить проект, снова войдите в тестовый интерфейс, консоль выведет следующее:
2019-10-16 10:20:18.489 INFO 3930 --- [ task-1] o.m.f.l.c.n.support.LoggingLocalNotice : Request Uri:/test, Logging:
{"endTime":1571192418416,"httpStatus":200,"requestBody":"","requestHeaders":{"host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"},"requestIp":"0:0:0:0:0:0:0:1","requestMethod":"GET","requestParam":"{\"name\":\"hengboy\"}","requestUri":"/test","responseBody":"你好:hengboy","responseHeaders":{},"serviceId":"apiboot-unified-manage-request-logs","serviceIp":"127.0.0.1","servicePort":"8080","spanId":"35a22772-5015-438a-a441-ba407926b789","startTime":1571192418391,"timeConsuming":25,"traceId":"ec53d162-314e-4516-8c24-5d5e03181543"}
В настоящее время мы можем видеть распечатанную информацию журнала запросов, но распечатанное содержимое журнала не украшено, не волнуйтесь,ApiBoot Logging
Также предоставляется конфигурация для украшения выходного содержимого.
Журнал запросов на украшение консоли
ApiBoot Logging
предоставленная конфигурацияapi.boot.logging.format-console-log-json
, этот параметр по умолчанию равенfalse
, мы можем украсить журнал запросов на печать, изменив значение этой конфигурации.
существуетapplication.yml
Конфигурация, добавленная в файл конфигурации, выглядит следующим образом:
api:
boot:
# ApiBoot Logging 日志组件配置
logging:
show-console-log: true
format-console-log-json: true
После того, как дополнение будет завершено, мы придем сноваперезапустить проектПосле доступа к тестовому интерфейсу консоль выводит следующее:
2019-10-16 10:24:05.480 INFO 4051 --- [ task-1] o.m.f.l.c.n.support.LoggingLocalNotice : Request Uri:/test, Logging:
{
"endTime":1571192645404,
"httpStatus":200,
"requestBody":"",
"requestHeaders":{
"accept":"*/*",
"host":"localhost:8080",
"user-agent":"curl/7.64.1"
},
"requestIp":"0:0:0:0:0:0:0:1",
"requestMethod":"GET",
"requestParam":"{\"name\":\"hengboy\"}",
"requestUri":"/test",
"responseBody":"你好:hengboy",
"responseHeaders":{},
"serviceId":"apiboot-unified-manage-request-logs",
"serviceIp":"127.0.0.1",
"servicePort":"8080",
"spanId":"277c0973-8042-4740-a8e7-2dbb0c7bb42c",
"startTime":1571192645381,
"timeConsuming":23,
"traceId":"7a742942-f3cc-4d72-9493-d828b090f1cc"
}
Легко ли увидеть детали запроса? Тем не менее, рекомендуется настроить в соответствии с реальной ситуацией вашего собственного проекта, украшенный журнал займет больше места.консольная линия.
Уведомление журнала LoggingNotice
ApiBoot Logging
Предоставляет интерфейс для уведомления журнала, нам нужно только реализовать этот интерфейс, чтобы получить его每一次请求
из日志对象
, вы также можете настроить реализацию каждого класса реализации уведомлений журнала执行顺序
.
существуетApiBoot Logging
Класс реализации, предоставленный внутри, показан на следующем рисунке:
-
LoggingLocalNotice
Этот класс представляет собой реализацию, используемую для печати журнала запросов на консоли и украшения журнала запросов.Приоритет:
Ordered#HIGHEST_PRECEDENCE
(высший приоритет). -
LoggingAdminNotice
Этот класс используется для передачи журналов запросов в
Logging Admin
, приоритет:Ordered#HIGHEST_PRECEDENCE +1
, нижеLoggingLocalNotice
.
Добавить заголовок с LoggingNotice
Выше мы видели два встроенныхLoggingNotice
Класс реализации, приоритет у нас тоже был ясен, то если мы добавим кастомныйLoggingNotice
Реализуйте класс для запроса журнала этого времениRequestHeader
Как добавить пользовательскую информацию заголовка внутри?
AddHeaderLoggingNoticeИсходный код класса уведомлений выглядит следующим образом:
/**
* 通过{@link LoggingNotice}向日志的请求header内添加区域信息
*
* @author 恒宇少年
*/
@Component
public class AddHeaderLoggingNotice implements LoggingNotice {
/**
* 区域头信息key
*/
private static final String SERVER_REGION = "server-region";
@Override
public void notice(MinBoxLog minBoxLog) {
minBoxLog.getRequestHeaders().put(SERVER_REGION, "JiNan");
}
/**
* 最大优先级
*
* @return
*/
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
}
потому чтоminbox-logging
Это было принято во внимание в начале дизайна, поэтому добавить его относительно просто, нам просто нужно настроить приоритет нашего пользовательского уведомления журнала, а затем передать#notice
метод для изменения значения объекта журнала этого запроса.
Стук по доске
В этой главе мы знакомимApiBoot Logging
Интегрированное использование , может быть использовано для сбора журналов запросов, эта возможность не только в этом, она будет очень мощной при правильном использовании.日志通知设计
Это позволяет нам очень хорошо контролировать журнал запроса, и журнал添加标识
,归类
и т. д., можно управлять конфигурацией日志打印
так же как美化
.
автор личноблогИспользуйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API