add excepltion-handler-logger-spring-web
This commit is contained in:
parent
f6ed057ece
commit
97bd0a1f13
|
|
@ -75,3 +75,7 @@ Interceptor для логирования запросов/ответов.
|
|||
## exception-handler-spring-web
|
||||
|
||||
Перехватывает ошибки сервера, определяет код ошибки и возвращает их в правильный `response`
|
||||
|
||||
## exception-handler-logger-spring-web
|
||||
|
||||
Добавляет логирование в обработку ошибок
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
plugins {
|
||||
id("kotlin")
|
||||
id("kotlin-spring")
|
||||
id("maven-publish")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
||||
|
||||
implementation("org.springframework.boot:spring-boot-starter-web")
|
||||
|
||||
implementation(project(":common-spring"))
|
||||
implementation(project(":logger-spring"))
|
||||
implementation(project(":exception-handler-spring-web"))
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package ru.touchin.exception.handler.spring.configurations
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.ComponentScan
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import ru.touchin.exception.handler.spring.logger.DefaultLogger
|
||||
import ru.touchin.exception.handler.spring.logger.Logger
|
||||
import ru.touchin.exception.handler.spring.logger.resolvers.LogExceptionResolverResult
|
||||
import ru.touchin.logger.dto.LogData
|
||||
import ru.touchin.logger.factory.LogBuilderFactory
|
||||
import ru.touchin.logger.spring.EnableSpringLogger
|
||||
|
||||
@Configuration
|
||||
@ComponentScan("ru.touchin.exception.handler.spring.logger.resolvers")
|
||||
@EnableSpringLogger
|
||||
class ExceptionHandlerLoggerConfiguration {
|
||||
|
||||
@Bean
|
||||
fun logger(
|
||||
logExceptionResolverResults: List<LogExceptionResolverResult<LogData>>,
|
||||
logBuilderFactory: LogBuilderFactory<LogData>,
|
||||
): Logger {
|
||||
return DefaultLogger(logExceptionResolverResults, logBuilderFactory)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package ru.touchin.exception.handler.spring.logger
|
||||
|
||||
import ru.touchin.exception.handler.dto.ExceptionResolverResult
|
||||
import ru.touchin.exception.handler.spring.logger.resolvers.LogExceptionResolverResult
|
||||
import ru.touchin.logger.dto.LogData
|
||||
import ru.touchin.logger.factory.LogBuilderFactory
|
||||
|
||||
class DefaultLogger(
|
||||
private val logExceptionResolverResults: List<LogExceptionResolverResult<LogData>>,
|
||||
private val logBuilderFactory: LogBuilderFactory<LogData>,
|
||||
) : Logger {
|
||||
|
||||
override fun log(clazz: Class<*>, exceptionResolverResult: ExceptionResolverResult) {
|
||||
logBuilderFactory.create(this::class.java)
|
||||
.let { initialBuilder ->
|
||||
logExceptionResolverResults.fold(initialBuilder) { builder, resolver ->
|
||||
resolver(exceptionResolverResult, builder)
|
||||
}
|
||||
}
|
||||
.also { builder ->
|
||||
builder.build().log()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
@file:Suppress("unused")
|
||||
package ru.touchin.exception.handler.spring.logger.resolvers
|
||||
|
||||
import org.springframework.core.annotation.Order
|
||||
import org.springframework.stereotype.Component
|
||||
import ru.touchin.common.spring.Ordered
|
||||
import ru.touchin.common.spring.web.dto.ApiError
|
||||
import ru.touchin.exception.handler.dto.ExceptionResolverResult
|
||||
import ru.touchin.logger.builder.LogBuilder
|
||||
import ru.touchin.logger.context.DefaultContextFields
|
||||
import ru.touchin.logger.context.LoggerExecutionContext
|
||||
import ru.touchin.logger.dto.LogData
|
||||
import ru.touchin.logger.dto.LogError
|
||||
|
||||
@Order(Ordered.HIGH)
|
||||
@Component
|
||||
class BaseLogExceptionResolverResultImpl : LogExceptionResolverResult<LogData> {
|
||||
|
||||
override fun invoke(
|
||||
exceptionResolverResult: ExceptionResolverResult,
|
||||
logBuilder: LogBuilder<LogData>
|
||||
): LogBuilder<LogData> {
|
||||
val errorCode = exceptionResolverResult.apiError.errorCode
|
||||
|
||||
return logBuilder
|
||||
.setError(exceptionResolverResult.exception)
|
||||
.also { builder ->
|
||||
val errorTag = if (errorCode == ApiError.FAILURE_CODE) {
|
||||
LogError.ERROR_FATAL_TAG
|
||||
} else {
|
||||
LogError.ERROR_BASE_TAG
|
||||
}
|
||||
|
||||
builder.addTags(errorTag)
|
||||
}
|
||||
.also {
|
||||
LoggerExecutionContext.current.updateContext { context ->
|
||||
context.plus(DefaultContextFields.appCode.name to errorCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
@file:Suppress("unused")
|
||||
package ru.touchin.exception.handler.spring.logger.resolvers
|
||||
|
||||
import ru.touchin.exception.handler.dto.ExceptionResolverResult
|
||||
import ru.touchin.logger.builder.LogBuilder
|
||||
|
||||
interface LogExceptionResolverResult<T> {
|
||||
|
||||
operator fun invoke(exceptionResolverResult: ExceptionResolverResult, logBuilder: LogBuilder<T>): LogBuilder<T>
|
||||
|
||||
}
|
||||
|
|
@ -29,3 +29,4 @@ include("logger")
|
|||
include("logger-spring")
|
||||
include("logger-spring-web")
|
||||
include("exception-handler-spring-web")
|
||||
include("exception-handler-logger-spring-web")
|
||||
|
|
|
|||
Loading…
Reference in New Issue