Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,5 @@ build/
.vscode/

data

logs
42 changes: 42 additions & 0 deletions src/main/java/com/example/ecm/aop/Log.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.example.ecm.aop;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Slf4j
@Aspect
@Component
public class Log {

@Pointcut("@annotation(Loggable)")
public void logExecutionTimeMethod() {
}

@Pointcut("@within(Loggable)")
public void logExecutionTimeClass() {
}

@Around("logExecutionTimeMethod() || logExecutionTimeClass()")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();

Object proceed = joinPoint.proceed();
ObjectMapper objectMapper = new ObjectMapper();

long executionTime = System.currentTimeMillis() - start;

log.info("Method {} in class {} executed in {} ms with args {}",
joinPoint.getSignature().getName(),
joinPoint.getTarget().getClass().getSimpleName(),
executionTime,
objectMapper.writeValueAsString(joinPoint.getArgs()));

return proceed;
}
}

11 changes: 11 additions & 0 deletions src/main/java/com/example/ecm/aop/Loggable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.example.ecm.aop;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ecm.controller;

import com.example.ecm.aop.Loggable;
import com.example.ecm.dto.requests.CreateAttributeRequest;
import com.example.ecm.dto.responses.CreateAttributeResponse;
import com.example.ecm.service.AttributeService;
Expand All @@ -18,6 +19,7 @@
@RestController
@RequestMapping("/attributes")
@RequiredArgsConstructor
@Loggable
public class AttributeController {

private final AttributeService attributeService;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/example/ecm/controller/AuthController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ecm.controller;

import com.example.ecm.aop.Loggable;
import com.example.ecm.dto.requests.LoginRequest;
import com.example.ecm.dto.responses.LoginResponse;
import com.example.ecm.service.AuthService;
Expand All @@ -13,6 +14,7 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/auth")
@Loggable
public class AuthController {

private final AuthService serviceAuth;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ecm.controller;

import com.example.ecm.aop.Loggable;
import com.example.ecm.dto.requests.CreateDocumentRequest;
import com.example.ecm.dto.requests.CreateDocumentVersionRequest;
import com.example.ecm.dto.responses.CreateDocumentResponse;
Expand All @@ -19,6 +20,7 @@
@RestController
@RequiredArgsConstructor
@RequestMapping("/documents")
@Loggable
public class DocumentController {

// Экземпляр DocumentService для обработки бизнес-логики, связанной с документами.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ecm.controller;

import com.example.ecm.aop.Loggable;
import com.example.ecm.dto.requests.CreateDocumentTypeRequest;
import com.example.ecm.dto.responses.CreateDocumentTypeResponse;
import com.example.ecm.service.DocumentTypeService;
Expand All @@ -18,6 +19,7 @@
@RestController
@RequestMapping("/document-types")
@RequiredArgsConstructor
@Loggable
public class DocumentTypeController {

// Экземпляр DocumentTypeService для выполнения бизнес-логики, связанной с типами документов.
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/example/ecm/controller/UserController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.ecm.controller;

import com.example.ecm.aop.Loggable;
import com.example.ecm.dto.requests.CreateUserRequest;
import com.example.ecm.dto.responses.CreateUserResponse;
import com.example.ecm.dto.requests.PutRoleRequest;
Expand All @@ -18,6 +19,7 @@
@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
@Loggable
public class UserController {

private final UserService userService;
Expand Down
25 changes: 25 additions & 0 deletions src/main/resources/logback-spring.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<configuration>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %level %logger{1} --- [%thread] %highlight(%msg%n)</pattern>
</encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/operations.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>

<logger name="com.example.ecm.aop.Log" level="INFO">
<appender-ref ref="FILE" />
</logger>

<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>

</configuration>