Written by
Poogle
on
on
2021.08.20 TIL
새롭게 배운 것 Done
운동
독서
알고리즘
코딩
Logging
- Log4J -> Logback -> SLF4J
- Binding 모듈
- SLF4J가 다양한 로깅 프레임워크를 지원 by 바인딩 모듈
- 로깅 프레임워크를 연결하는 역할
Log Level
- trace
- debug
- info
- warn
- error
logback 설정
private static final Logger logger = LoggerFactory.getLogger(OrderTester.class);
- 패키지 기준으로 로그 레벨을 설정하곤 함
logback-test.xml
- 없으면
logback.groovy
- 없으면
logback.xml
- 모두 없으면 기본 설정 전략 -> BasicConfiguration
<configuration>
<property name="LOG_PATTERN" values="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.ConsoleAppender">
<file>logs/kdt_${bySecond}.log</file>
<append>false</append>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<logger name="org.prgrms.kdt" level="debug">
<appender-ref ref="FILE"/>
</logger>
<root level="warn">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
<appender-ref ref="STDOUT" />
는 중복 위험이 있음- 로그를 파일로 관리하는데 로그 찍힐 때마다의 시간으로 파일 이름 설정가능
- Pattern Layout
- %d: 로깅 이벤트의 날짜를 출력
- %date{ISO8601}, %date{HH:mm:ss.SSS}
- %logger{length}: Logger name의 이름을 축약 *{length} 는 최대 자릿 수
- %thread: 현재 Thread name
- %-5level: log level -5 는 출력 고정폭 값
- %msg: log message
- %n - new line
참고: 공식문서
- %d: 로깅 이벤트의 날짜를 출력
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- <file>logs/access.log</file>-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/access-%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
- 로그를 다 남기면 많은 파일이 나옴
- 일별 로그를 한 파일에다가 업로드 할 수 있도록 하기
<conversionRule
conversionWord="clr"
conversionClass="org.springframework.boot.logging.logback.ColorConverter" />
<property name="CONSOLE_LOG_PATTERN" values="%clr(%d{HH:mm:ss.SSS}){cyan} [%thread] %-5level %logger{36} - %msg%n"/>
<property name="FILE_LOG_PATTERN" values="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
- 색깔 별로 표시할 수 있도록 conversion 설정
SpringBoot
@SpringBootApplication
: 이걸 기준으로 컴포넌트 스캔- CoC(Convention over Configuration): 설정보다는 관례
Spring Boot 외부에서 설정 가져오는 순서
- 홈 디렉터리 (개발 도구가 활성화된 경우
~/.spring-boot-devtools.properties
)의 개발 도구 전역 설정 프로퍼티 - 테스트의
@TestPropertySource
어노테이션 - 테스트의 properties 애트리뷰트
@SpringBootTest
와 어플리케이션 특정 부분을 테스트하기 위한 테스트 어노테이션에서 사용 가능 - 커맨드라인 인자
SPRING_APPLICATION_JSON
의 프로퍼티(환경 변수나 시스템 프로퍼티에 삽입된 인라인 JSON)ServletConfig
초기 파라미터ServletContext
초기 파라미터java:comp/env
의 JNDI 애트리뷰트- Java 시스템 프로퍼티(
System.getProperties()
) - OS 환경변수
random.*
에 프로퍼티를 가진RandomValuePropertySource
- 패키지된 jar 외부의 프로파일 지정 애플리케이션 프로퍼티(
application-{profile}.properties
와 YAML 형식) - 패키지된 jar 내부의 프로파일 지정 애플리케이션 프로퍼티(
application-{profile}.properties
와 YAML 형식) - 패키지된 jar 외부의 애플리케이션 프로퍼티(
application-{profile}.properties
와 YAML 형식) - 패키지된 jar 내부의 애플리케이션 프로퍼티(
application-{profile}.properties
와 YAML 형식) @Configuration
클래스의@PropertySource
어노테이션- (
SpringApplication.setDefaultProperties
에 의해 명시된) 기본 프로퍼티
실행 가능한 jar 파일 생성하기
mvn clean package spring-boot:repackage
java -jar target/~.jar
Intellij - profile
- Edit Configurations - Active Profiles: {선택}
깨달은 점 FEELING
- 롬복으로 로그를 굉장히 쉽게 썼는데 logback 파일 만들어서 굉장히 섬세하게 다룰 수 있다는 걸 깨달았다.