Данный проект основан на AOP-Logging.
Были добавлены следующие метки:
Ссылка на jar:
<dependency>
<groupId>com.github.jeffreyning</groupId>
<artifactId>nh-aop-logging</artifactId>
<version>1.0.1</version>
</dependency>
В springboot-проекте также необходимо напрямую или косвенно импортировать:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Если требуется выводить логи в формате JSON, то также нужно импортировать:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.0</version>
</dependency>
Инициализация журнала AOP:
@EnableAspectJAutoProxy
public class LoggerConfig {
private static final boolean SKIP_NULL_FIELDS = true;
private static final int CROP_THRESHOLD = 7;
private static final Set<String> EXCLUDE_SECURE_FIELD_NAMES = Collections.<String>emptySet();
@Bean
public AOPLogger getLoggerBean() {
AOPLogger aopLogger = new AOPLogger();
aopLogger.setLogAdapter(new UniversalLogAdapter(SKIP_NULL_FIELDS, CROP_THRESHOLD, EXCLUDE_SECURE_FIELD_NAMES));
return aopLogger;
}
}
Настройка фильтра: Внедрение пользовательского класса для получения userId, поддерживающего получение ReqId и userId:
@Bean
public FilterRegistrationBean getDemoFilter() {
ReqIdFilter reqIdFilter = new ReqIdFilter();
reqIdFilter.setUserInfoLog(new UserInfoLog() {
@Override
public String getUserId() {
//пользовательская логика для получения userid
return "admin";
}
});
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(reqIdFilter);
List<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("/*");
registrationBean.setUrlPatterns(urlPatterns);
registrationBean.setOrder(100);
return registrationBean;
}
На контроллере или методе можно использовать аннотации:
Пример контроллера:
@RequestMapping("/test")
@LogInfo
@LogException
@LogModule("system")
public class TestCtl {
@GetMapping("/query")
public Map query(String echo){
Map retMap=new HashMap();
retMap.put("status",0);
retMap.put("msg", "success");
retMap.put("data", echo);
return retMap;
}
@GetMapping("/createException")
public Map createException(String echo){
Map retMap=null;
retMap.put("status",0);
retMap.put("msg", "success");
retMap.put="data", echo;
return retMap;
}
}
Конфигурация формата логов:
<appender name="interfaceConsole" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line]- class=%X{callingClass} method=%X{callingMethod} reqId=%X{reqId} userId=%X{userId} bizModule=%X{bizModule} elapsedTime=%X{elapsedTime} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
Для вывода логов в формате json, удобном для сбора и анализа elk:
<appender name="interfaceLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logFile}.interface</file>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<pattern>
{
"project": "log-demo",
"timestamp": "%date{\"yyyy-MM-dd'T'HH:mm:ss,SSSZ\"}",
"log_level": "%level",
"thread": "%thread",
"class_name": "%X{callingClass}",
"class_method":"%X{callingMethod}",
"message": "%message",
"req_id":
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )