티스토리 뷰
Logback이란?
- 자바 오픈소스 로깅 프레임워크로 slf4j의 구현체
- 스프링 부트 기본으로 설정되어 있어서 사용시 별도의 라이브러리를 추가하지 않아도 된다.
- spring-boot-start-web 안에 spring-boot-starter-logging 구현체가 있다.
- 로깅을 수행하기 위해 필요한 주요 설정 요소 3가지는 Logger, Appender, Encdoer가 있다.
Logback 기본 설정
logback-spring.xml을 resources 디렉토리에 만들어서 참조
1) classpath에 logback-spring.xml이 있으면 설정파일을 읽어간다.
2) logback-spring.xml이 없으면 .yml의 설정을 읽어간다.
3) logback-spring.xml과 .yml이 동시에 있으면 .yml 설정 파일 을 적용 후 xml 파일이 적용된다.
로그 레벨 순서 및 사용 방법
1) ERROR: 요청을 처리하는 중 오류가 발생한 경우 표시
2) WARN: 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지
3) INFO: 상태변경과 같은 정보성 로그를 표시
4) DEBUG: 프로그램을 디버깅하기 위한 정보 표시
5) TRACE: 추적 레벨은 Debug 보다 훨씬 상세한 정보를 나타냄
스프링 부트에서 레벨 지정 방법
1) 루트 레벨 전체 로깅 레벨 지정
logging.level.root=info
2) 패키지별로 로깅 레벨 지정
logging.level.com.god.bo.test=info
logging.level.com.god.bo.test.controller=debug
예시)
package com.god.bo.test.controller;
@Controller
public class TestController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "/test")
public ModelAndView test() throws Exception{
logger.trace("Trace Level 테스트");
logger.debug("DEBUG Level 테스트");
logger.info("INFO Level 테스트");
logger.warn("Warn Level 테스트");
logger.error("ERROR Level 테스트");
return mav;
}
}
Spring boot profiles
* application.yml
spring:
profiles:
active:
- local
group:
local:
- site-local
- db-local
dev:
- site-dev
- db-dev
include:
- db
- my-service
- site
- spring-profiles-active: 기본적으로 활성화 할 profile을 local로 설정
- spring-profiles-group
- local
- dev
- spring-profiles-include: 어플리케이션을 실행할 때 profile을 포함하여 실행할 수 있다.
* application-db.yml
#default 공통설정
spring:
jpa:
show-sql: false
open-in-view: false
database-platform: MYSQL
hibernate:
ddl-auto: none
use-new-id-generator-mappings: true
properties:
hibernate.format_sql: true
hibernate.show_sql: false
hibernate.dialect: org.hibernate.dialect.MySQL57Dialect
hibernate.default_fetch_size: ${chunkSize:100}
hibernate.connection.provider_disables_autocommit: true
hibernate.jdbc.batch_size: ${chunkSize:100}
hibernate.order_inserts: true
hibernate.order_updates: true
--- # local 설정
spring:
config:
activate:
on-profile: "db-local"
jpa:
show-sql: true
database-platform: H2
hibernate:
ddl-auto: create-drop
datasource:
hikari:
driver-class-name: org.h2.Driver
jdbc-url: jdbc:h2:mem://localhost/~/divelog;MODE=MySQL;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;
username: sa
password:
--- # dev 설정
spring:
config:
activate:
on-profile: "db-dev"
jpa:
hibernate:
ddl-auto: update
datasource:
hikari:
driver-class-name: org.mariadb.jdbc.Driver
...
- spring-config-active-on-profile:
* application-site.yml
site:
author-name: JuHyun
author-email: a@a.com
--- # local 설정
spring:
config:
activate:
on-profile: "site-local"
site:
author-name: JuHyun-local
author-email: a.local@a.com
--- # dev 설정
spring:
config:
activate:
on-profile: "site-dev"
site:
author-name: JuHyun-dev
author-email: a.dev@a.com
- spring-config-active-on-profile: db와 마찬가지로 application.yml 파일에서 작성한 group profile
Springutils의 StringUtils
StringUtils: 자바의 String 클래스가 제공하는 문자열 관련 기능을 강화한 클래스
유용한 메서드
1) isEmpty(): null 체크도 해주고, 길이가 0이 아닌지 체크를 하는 것
- string이 아닌 객체를 null 체크하고 싶을 때 사용 (Long, Integer)
public static boolean isEmpty(@Nullable Object str) {
return (str == null || "".equals(str));
}
2) hasText(): 문자열 유효성 검증 유틸 메소드
- null 체크, 길이가 0보다 큰지 체크, 공백이 아닌 문자열이 하나라도 포함되었는지까지 한번에 검증
public static boolean hasText(@Nullable String str) {
return (str != null && !str.isEmpty() && containsText(str));
}
private static boolean containsText(CharSequence str) {
int strLen = str.length();
for (int i = 0; i < strLen; i++) {
if (!Character.isWhitespace(str.charAt(i))) {
return true;
}
}
return false;
}
Springutils의 CollectionUtils
CollectionUtils: java Collection(List, Map, Set)의 종류의 값들의 존재 여부를 판단하는 메서드
public static boolean isEmpty(@Nullable Collection<?> collection) {
return (collection == null || collection.isEmpty());
}
public static boolean isEmpty(@Nullable Map<?, ?> map) {
return (map == null || map.isEmpty());
}
'SPRING' 카테고리의 다른 글
@ExceptionHandler, @ControllerAdvice, AOP (0) | 2023.06.29 |
---|---|
ResponseEntity, custom Exception, (0) | 2023.06.29 |
[프로젝트 구조] entity,dto,controller,service,repository (0) | 2023.06.29 |
@RequestParam (0) | 2023.06.29 |
1. SPRING DI (0) | 2022.12.07 |