keytool.exe -genkey -alias juheon -keyalg RSA -keypass 1234qwer -storepass 1234qwer -keystore juheon.jks keytool.exe -export -alias juheon -storepass 1234qwer -file juheon.cer -keystore juheon.jks keytool.exe -importkeystore -srckeystore juheon.jks -destkeystore juheon.key.p12 -deststoretype PKCS12 D:\Java\32bit\jdk1.5.0_22\jre\lib\security\cacert D:\Java\32bit\jdk1.5.0_22\bin\keytool.exe -import -alias tsasample -keystore D:\Java\32bit\jdk1.5.0_22\jre\lib\security\cacert -file D:\workspace\Servers\tsa-server-web-config\tomcat.cer keytool -import -alias somansa -keystore C:\Program Files\Java\jdk1.8.0_102\jre\lib\security\cacert -file c:\somansa.cer #인증서 생성 keytool -genkey -alias keyAlias -keyalg RSA -keypass changeit -storepass changeit –validity 9999 -keystore keystore.jks keytool -export -alias keyAlias -storepass changeit -file server.cer -keystore keystore.jks keytool -import -v -trustcacerts -alias keyAlias -file server.cer ...
Logging
이글을 적고 테스트 하다보니 Spring Boot은 기본적으로 logger를 logback을 사용한다. 아... 이 등쉰쉑키...
설정이 매우 간편하다. application.properties에 설정 하면 끝!
application.properties
Controller
Console
붉은 색으로 마킹된 패키지 하위의 모든 클래스 로그 레벨에 대한 설정이다.
logging.level.com.ha.helloworld=info
Logger 구현체인 logback을 이용한 설정인 logback-spring.xml 파일을 생성하여 설정해도 된다. 유의할 점은 application.properties, logback-spring.xml 양쪽에 다 패키지나 그룹에 대한 설정을 하면 동일한 로그가 N개 찍히게 되니 유의.
가장일반적인 설정 샘플
Log
가장 많이 알려진 log 프레임웍인 slf4j를 사용하여 로깅한다. slf4j 구현체는 logback 사용.
logback
logback은 core, classic, access가 있는데 core는 classic, access(Servlet Container에서 Http access log으로 사용)에서 사용하는 공통 모듈이다. classic만 추가하면 관련 라이브러리들이 추가되니 최근 릴리즈된 버전중 사람들이 가장 많이 사용하는 버전을 dependency에 추가한다.
dependencies {
...
compile("ch.qos.logback:logback-classic:1.2.3")
...
}
이글을 적고 테스트 하다보니 Spring Boot은 기본적으로 logger를 logback을 사용한다. 아... 이 등쉰쉑키...
설정이 매우 간편하다. application.properties에 설정 하면 끝!
application.properties
logging.level.org.springframework.web=info
logging.level.org.hibernate=ERROR
logging.level.root=error
logging.level.com.ha.helloworld=info //테스트 할 설정
logging.pattern.console=[%thread] %highlight(%-5level) %d{yyyy-MM-dd HH:mm:ss} - %msg%n
Controller
package com.ha.helloworld.controller;
...
static final Logger logger = LoggerFactory.getLogger(EmployeeController.class);
...
@GetMapping
public ResponseEntity> getAllEmployee() {
List list = this.employeeService.getAllEmployees();
logger.info("Result : {}" + list); //테스트 할 로그
ResponseEntity> response = new ResponseEntity<>(list, new HttpHeaders(), HttpStatus.OK);
...
Console
03:09:04.545 [http-nio-80-exec-2] INFO c.h.h.controller.EmployeeController - Result : {}[Employee[id=1,firstName=Lokesh,lastName=Gupta,email=abc@gmail.com], Employee[id=2,firstName=Deja,lastName=Vu,email=xyz@email.com], Employee[id=3,firstName=Caption,lastName=America,email=cap@marvel.com], Employee[id=4,firstName=juheon,lastName=ha,email=xyz@email.com], Employee[id=6,firstName=juheon,lastName=ha,email=xyz@email.com], Employee[id=7,firstName=juheon,lastName=ha,email=xyz@email.com]
...
붉은 색으로 마킹된 패키지 하위의 모든 클래스 로그 레벨에 대한 설정이다.
logging.level.com.ha.helloworld=info
Logger 구현체인 logback을 이용한 설정인 logback-spring.xml 파일을 생성하여 설정해도 된다. 유의할 점은 application.properties, logback-spring.xml 양쪽에 다 패키지나 그룹에 대한 설정을 하면 동일한 로그가 N개 찍히게 되니 유의.
logback-spring.xml
logback 설절파일이다. classpath경로에 생성하여 필요한 설정들을 한다. 경로를 변경하고 싶다면 application.properties 파일에 "logging.config=classpath:config/log.xml" 와 같이 설정하면된다.
가장일반적인 설정 샘플
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <springProperty scope="context" name="logging.file.path" source="logging.file.path" defaultValue="d:/log"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern> <!-- <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> --> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${logging.file.path}/logFile.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>logFile.%d{yyyy-MM-dd}.zip</fileNamePattern> <!-- keep 30 days' worth of history capped at 3GB total size --> <maxHistory>30</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <file>${logging.file.path}/ErrorLogFile.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>ErrorLogFile.%d{yyyy-MM-dd}.zip</fileNamePattern> <!-- keep 30 days' worth of history capped at 3GB total size --> <maxHistory>30</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="ERROR_FILE" /> </root> <logger name="com.ha.helloworld.controller" level="debug"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> <appender-ref ref="ERROR_FILE" /> </logger> </configuration>
댓글
댓글 쓰기