첫번째로 할일은 build.gradle에 logback encoder를 추가 해줍니다.


compile group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '5.2' // Log를 JSON 형식으로 표현하기 위해 사용


그다음에는 로그 포멧을 위해 Java Class 파일 2개를 생성합니다.


패키지 위치는 해당 프로젝트 아래에만 있으면 됩니다. 저는 이렇게 두개를 만들었습니다.


package kr.co.eda.kbn.logback;

import com.fasterxml.jackson.databind.MappingJsonFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import net.logstash.logback.decorate.JsonFactoryDecorator;

/**
* ISO08601 데코레이터
*
* @since 2018-12-19
* @see {@link JsonFactoryDecorator}
*/
public class ISO8601DateDecorator implements JsonFactoryDecorator {

@Override
public MappingJsonFactory decorate(MappingJsonFactory factory) {

ObjectMapper codec = factory.getCodec();
codec.setDateFormat(new StdDateFormat());

return factory;
}
}

원래는 ISO08601DateFormat를 썻지만 현재 사용하는 logback encoder에서 Deprecated가 되어서 StdDateFormat를 사용하였습니다.


package kr.co.eda.kbn.logback;

import com.fasterxml.jackson.core.JsonGenerator;
import net.logstash.logback.decorate.JsonGeneratorDecorator;

/**
* 로그를 JSON으로 출력하기 위한 데코레이터
*
* @since 2018-12-19
* @see {@link JsonGeneratorDecorator}
*/
public class PrettyPrintingDecorator implements JsonGeneratorDecorator {

@Override
public JsonGenerator decorate(JsonGenerator generator) {

return generator.useDefaultPrettyPrinter();
}
}


마지막으로 실제 Spring 에서 로그를 설정하는 부분으로 가서 encoder를 지정해줍니다.


<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

<!-- Spring Boot의 logback 설정은 유지하면서 확장 -->
<include resource="org/springframework/boot/logging/logback/base.xml"/>

<!-- 로그 저장 할 위치 -->
<property name="LOG_DIR" value="D:/p_project/logs/" />

<appender name="dailyRollingFileAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<prudent>true</prudent>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<jsonGeneratorDecorator class="kr.co.eda.kbn.logback.PrettyPrintingDecorator"/>
<jsonFactoryDecorator class="kr.co.eda.kbn.logback.ISO8601DateDecorator"/>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}kbn.%d{yyyy-MM-dd}.json</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 30일 전 까지의 로그만 저장 -->
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>

<logger name="org.springframework.web" level="INFO"/>
<logger name="org.thymeleaf" level="INFO"/>-
<logger name="org.hibernate.SQL" level="INFO"/>
<logger name="org.quartz.core" level="INFO"/>
<logger name="org.h2.server.web" level="INFO"/>

<logger name="jdbc" level="OFF" />
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.sqltiming" level="DEBUG"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="DEBUG"/>
<logger name="jdbc.connection" level="OFF"/>

<root level="INFO">
<appender-ref ref="dailyRollingFileAppender" />
</root>
</configuration>

여기 파일에서 추가 된 부분은


<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<jsonGeneratorDecorator class="kr.co.eda.kbn.logback.PrettyPrintingDecorator"/>
<jsonFactoryDecorator class="kr.co.eda.kbn.logback.ISO8601DateDecorator"/>
</encoder>


이 부분 입니다.


이렇게 설정을 끝나고 로그를 찍고 난뒤 로그 파일을 열어보면




이렇게 로그가 JSON 형식으로 찍히는것을 볼 수 있습니다.

'Spring' 카테고리의 다른 글

[SBA] Spring Boot Admin Security 적용하기  (0) 2018.12.18
[SBA] Spring Boot Admin 띄워보기  (0) 2018.12.18

이전에 진행했던 Spring Boot Admin 띄워보기에 이어 여기에 Spring Security 까지 적용해보겠습니다.


(이전 글: https://dev-t-blog.tistory.com/26)


여기서 추가된것은 Gradle에 Srping Security 의존성하고


WebSecurityConfig 파일 그리고 application.yml이 조금 추가되었습니다.


Sprign Boot Admin 로그인 할때 데이터베이스를 이용할 수 도 있고, 인메모리 DB, application.yml에 값을 설정하여 여러가지고 사용할 수 있는데


현재 아래의 소스는 인메모리 DB로 진행하였습니다. 그래서 별도의 DB없이 바로 실행이 가능합니다.


해당 소스를 아래에 링크 걸어두었습니다.


구동방법은 이전 글에서 참조해주시기 바랍니다.


kbn-sample.zip

다운로드(클라이언트)


eda-sba.zip

다운로드(관리자)




eda-sba 구동후 http://localhost:8081/eda-sba/ 에 접속을 하시면 이와 같은 화면을 보실 수 있습니다.

'Spring' 카테고리의 다른 글

[logback] Log를 JSON 형식으로 출력하는 방법  (0) 2018.12.19
[SBA] Spring Boot Admin 띄워보기  (0) 2018.12.18

스프링으로 웹 어플리케이션을 개발하다보면 해당 웹 어플리케이션을 모니터링 해야할 때가 있습니다.


별도의 유료의 모니터링 시스템을 갖춘 회사라면 상관이 없지만 


현재 필요한것은 무료 모니터링 시스템을 갖추는 것입니다.

(회사에서 안사줘서.....)


스프링 진영에서 무료로 사용할 수 있는 모니터링 프로젝트가 있습니다.


프로젝트는 Spring Boot Admin 입니다.

(Git URL: https://github.com/codecentric/spring-boot-admin)


이 프로젝트를 이용해서 손쉽게 모니터링 시스템을 갖출 수 있습니다.


해당 예제 소스는 첨부파일로 첨부하였습니다.


사전에 설치할 프로그램은


Maven, Java 1.8 이상, Gradle, IDE IntelliJ 입니다.


kbn-sample.zip

클릭하여 다운로드



eda-sba.zip

클릭하여 다운로드



위의 소스를 받은 후 IntelliJ에서 프로젝트를 Import 후 


eda-sba 를 먼저 Start 시켜준 후 kbn-sample Start를 시키면 됩니다.


그리고 웹 브라우저에서 http://localhost:8081/eda-sba 에 접근 하시면 됩니다.


접근을 하게 되면 아래와 같은 화면이 나옵니다. 


그리고 상단의 wallboard 를 클릭 후 화면에 나오는 6각형 도형을 클릭하면 해당 어플리케이션의 자세한 현황이 나옵니다.


마지막으로 Spring Security 를 이용하면 Spring Boot Admin 에 로그인 기능도 추가가 가능하며 그 외의 인증들도 사용이 가능합니다.


해당 예제 프로젝트는 Security 없이 동작하는 예제 입니다.




Spring Boot Admin http://localhost:8081/eda-sba/ 에 접속한 첫 화면 입니다.





상단의 Wallboard 접근 후 6각형 도형을 클릭 후 현재 어플리케이션의 상태를 실시간으로 확인하는 화면 입니다.



+ Recent posts