Commit 46a15c9d authored by George Novikov's avatar George Novikov

класс ProcessLogger для кастомного логгирования процессов

parent 07def582
Pipeline #357 failed with stage
......@@ -13,6 +13,7 @@ import kz.project.printedFormsService.data.dto.TemplateDto;
import kz.project.printedFormsService.data.dto.TemplateResponseDto;
import kz.project.printedFormsService.data.dto.TemplateShortDto;
import kz.project.printedFormsService.exception.ValidationException;
import kz.project.printedFormsService.logging.ProcessLogger;
import kz.project.printedFormsService.service.TemplateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -43,6 +44,7 @@ public class TemplateController {
public static final String GET_ALL_BY_CODE = "/allVersion/{code}";
private final TemplateService service;
private final ProcessLogger processLogger;
@Hidden
@GetMapping(GET_TEMPLATE)
......@@ -220,6 +222,7 @@ public class TemplateController {
public Page<TemplateShortDto> getAll(@Parameter(name = "isActive") @RequestParam(value = "isActive", required = false) Boolean isActive,
@Parameter(name = "page") @RequestParam(value = "page", defaultValue = "0") Integer page,
@Parameter(name = "size") @RequestParam(value = "size", defaultValue = "50") Integer size) {
processLogger.write(TemplateController.class, "test_user", "test_ip", "Получение списка шаблонов");
return service.getAllTemplate(isActive, PageRequest.of(page, size));
}
......
package kz.project.printedFormsService.logging;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.datetime.DateFormatter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.Locale;
@Configuration
public class LoggingConfig {
private static final String DEFAULT_LOCALE = "ru_RU";
private static final String DEFAULT_DATE_FORMAT = "dd:MM:yyyy hh:mm:ss";
@Value("${process-logger.date-format}")
private String dateFormatString;
@Value("${process-logger.locale}")
private String localeString;
@Bean
public DateFormatter dateFormatter(){
return new DateFormatter(dateFormatString != null ? dateFormatString : DEFAULT_DATE_FORMAT);
}
@Bean
public Locale locale(){
return parseLocale(localeString != null ? localeString : DEFAULT_LOCALE);
}
@Bean
public ZoneId zoneId(){
return ZoneId.systemDefault();
}
private Locale parseLocale(String localeString){
String[] localeParts = localeString.split("_");
if (localeParts.length == 1) localeParts[1] = "";
return new Locale(localeParts[0], localeParts[1]);
}
}
package kz.project.printedFormsService.logging;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.format.datetime.DateFormatter;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileWriter;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.Locale;
/* Класс для логгирования старта и завершения процессов на естественном языке */
@Component
public class ProcessLogger {
private static final Logger LOGGER = LoggerFactory.getLogger(ProcessLogger.class);
private static final String DEFAULT_FILE_PATH = "/var/log/processLog";
private static final String DEFAULT_FILENAME = "printService.log";
private static final String DEFAULT_DELIMITER = " ";
@Value("${process-logger.file-path}")
private String logFilePath;
@Value("${process-logger.file-name}")
private String logFileName;
@Value("${process-logger.delimiter}")
private String delimiter;
@Value("${spring.application.name}")
private String serviceName;
private DateFormatter dateFormatter;
private Locale locale;
private ZoneId zoneId;
public ProcessLogger(DateFormatter dateFormatter, Locale locale, ZoneId zoneId) {
this.dateFormatter = dateFormatter;
this.locale = locale;
this.zoneId = zoneId;
}
public void write(Class javaClass, String userName, String ip, String description){
try {
String delimiter = this.delimiter != null ? this.delimiter : DEFAULT_DELIMITER;
String filePath = this.logFilePath != null ? this.logFilePath : DEFAULT_FILE_PATH;
String fileName = this.logFileName != null ? this.logFileName : DEFAULT_FILENAME;
String fullFilePath = String.format("%s%s", filePath, fileName);
String logRow = String.format(
"%s%s%s%s%s%s%s%s%s%s%s",
serviceName,
delimiter,
javaClass.getSimpleName(),
delimiter,
getTodayDateTimeString(),
delimiter,
userName,
delimiter,
ip,
delimiter,
description
);
File file = new File(fullFilePath);
boolean isCreated = file.createNewFile();
FileWriter writer = new FileWriter(file, true);
writer.append(logRow).append(System.lineSeparator());
writer.close();
} catch (Exception e){
LOGGER.error(e.getMessage(), e);
}
}
private String getTodayDateTimeString(){
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = new Date().toInstant();
ZonedDateTime zonedDateTime = instant.atZone(zoneId);
Date today = Date.from(zonedDateTime.toInstant());
return dateFormatter.print(today, locale);
}
}
......@@ -72,3 +72,10 @@ management:
enabled: false
beans:
enabled: false
process-logger:
file-path: /var/log/processLog
file-name: printService.log
delimiter: " "
date-format: "dd:MM:yyyy hh:mm:ss"
locale: kk_KZ
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment