일상/일기장
TIL.22.03.03 - Spring : 환경설정, Log
jmaster
2022. 3. 4. 00:19
spring 설정
spring.io 접속 해서 툴를 다운받거나 이클립스에서 확장프로그램 이용해서 다운
설치 방법
- eclipse 접속후 marketplace에서 Spring Tool 설치
2.spring explorer 설정
- resources: 프로그램이 필요한 xml파일 저장 (log4j.xml, mybatis.xml)
src
- main: 메인 프로그램 작성 시
- →interface
- webapp (jsp,html,css)
- test: 테스트 프로그램 작성시
target
- 서버페이지에 들어가 module에서 경로 변경 : controller → spring
- 라이브러리가 빌드가 안될경우 Deployment Assembly에 Maven Dependencies를 확인한후 없으면 Add를 선택하여 추가한다.
Project Facets에서 Dynamic Web Module과 Java 속성 변경
spring 라이브러리와 log4j 라이브러리 버전 업데이트
Maven : 빌드 툴 - 프로젝트의 라이브러리를 관리하는 프로그램
- pom.xml : Maven 빌드 툴을 이용하여 프로젝트에 라이브러리를 빌드 하기 위한 정보를 제공하는 환경설정 파일
- →로컬 저장소에 라이브러리 파일이 없는 경우 메이븐 저장소에서 다운로드 받아 저장
- 로컬 저장소(Local Repository) : 프로젝트에 빌드될 라이브러리를 저장하여 제공하는 폴더→ mac에서는 터미널에서 “open ~/.m2” 명령어를 입력한 후 실행→라이브러리 빌드에 문제가 있는 경우 이클립스 종료 후 .m2 폴더의 라이브러리 파일 삭제
- →사용자 폴더의 .m2(숨겨진 파일) 폴더 사용
- 메이븐 저장소(Maven Repository) : https://mvnrepository.com/
- properties : pom.xml 파일에서 자주 사용되는 값을 등록하기 위한 엘리먼트→하위 엘리먼트의 이름의 ${엘리먼트명} 형식으로 표현하여 엘리먼트의 내용을 값으로 제공
- <properties> <java-version>1.6</java-version>//없어도 됨 <org.springframework-version>3.1.1.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties>
- →라이브러리 버전을 효율적으로 관리
- dependency : 빌드 처리하기 위한 라이브러리의 정보를 설정하는 엘리먼트
- →의존 관계의 라이브러리 자동 빌드 처리
- groupId : 라이브러리 그룹을 설정하기 위한 엘리먼트 (회사)
- artifactId : 라이브러리 이름을 설정하기 위한 엘리먼트 (프로그램의 이름)
- version : 라이브러리 버전을 설정하기 위한 엘리먼트
- exclusions : exclusion 엘리먼트를 등록하기 위한 상위 엘리먼트
- exclustion: 의존 관계의 라이브러리 중 제외 라이브러리를
- scope : 라이브러리의 적용범위
- →실행할 때 사용
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
xerces:
=> 로그 구현체를 이용한 로깅 처리시 경로에 문제가 있는 경우 해결하기 위한 라이브러리
로깅 사용방법
log4j: 장치에 메세지를 기록하는 로그 구현 프로그램
→ log4j.xml 파일에 기록 관련 정보 설정
- appender : 로그 전달 방식(로그매체)과 로그 형식을 설정하는 엘리먼트
- name : appender 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정
- class : Appender 인터페이스를 상속받은 로그 구현 클래스를 속성값으로 설정
- param : Appender 인스턴스 생성시 필요한 값을 제공하는 엘리먼트 ‘
- → Appender 클래스마다 필요한 이름과 값이 다르게 설정
- name 속성 : 전달값을 구분하기 위한 식별자를 속성값으로 설정
- value 속성 : 전달값을 구분하기 위한 식별자를 속성값으로 설정
- layout : 로그 형식을 설정하는 엘리먼트
- param : Layout 인스턴스에 필요한 값을 제공하는 엘리먼트
- PatternLayout 클래스는 로그 패턴 문자(Conversion Character)를 제공
- class 속성 : 로그 형식을 제공하는 클래스를 속성값으로 설정
- Conversion Character
- %c : 패키지가 포함된 클래스 이름을 기록 - {정수값}을 이용하여 원하는 형식으로 변환 가능
- → $c{1} : 패키지를 제외한 클래스 이름만 기록
- %d : 날짜와 시간 기록 - {SimpleDateFormatPattern}을 이용하여 원하는 형식으로 기록 가능
- →%d{yyyy-MM-dd} [년-월-일] 형식으로 날짜만 기록
- %m : 로그 메세지 기록
- %n : 엔터[Enter] 기록 -로그 줄바꿈
- %M : 호출 메소드 이름 기록
- %p : 로그 이벤트 기록 - TRACE > DEBUG > INFO > WARN > ERROR > FATAL
- %r : 처리 시간 기록
- %f : 처리 스레드 이름 기록
- Conversion Character 자릿수 설정
- %p : 로그 이밴트의 길이만큼 자릿수를 제공하여 기록
- %자릿수p : 로그 이밴트의 최대 자릿수를 제공하여 기록
- %.자릿수p : 로그 이밴트의 최소 자릿수를 제공하여 기록
- %-자릿수p : 로그 이밴트의 최대 자릿수를 제공하여 기록(왼쪽 정렬)
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
logger
- logger : 기록자(Appender)를 이용하여 로그를 구현하기 위한 엘리먼트
- name : 기록자가 동작될 특정 패키지 경로를 속성값으로 설정
- level : 로그 이벤트를 설정하기 위한 엘리먼트
- value 속성 : 로그 이벤트를 속성값으로 설정
<logger name="xyz.itwill.controller">
<level value="info" />
</logger>
Root Logger
- root : 최상위 기록 정보(Logger)를 설정하기 위한 엘리먼트→모든 logger 엘리먼트는 root 엘리먼트의 기록 정보를 상속받아 상속
- property : 기본 로그 이벤트를 설정하기 위한 엘리먼트
- value 속성 : 로그 이벤트를 속성값으로 설정
- appender-ref : 기록자를 설정하기 위한 엘리먼트
- ref 속성 : appender 엘리먼트의 식별자를 속성값으로 설정
- →모든 패키지의 클래스에서 기본적으로 적용되는 기록정보
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
Logger : 로그 구현체에게 기록을 전달하기 위한 인스턴스
LoogerFactory : Logger 인스턴스를 제공하기 위한 클래스
LoggerFactory.getLogger(Class<T> clazz) : 메모리에 저장된 클래스(Clazz)에서 발생된 기록을 로그 구현체에게 전달하는 Logger 인스턴스를 반환하는 메소드
Logger.info(String message) : 로그 이벤트를 발생하여 로그 구현체에게 메세지를 전달하는 메세지
DailyRollingAppend : 매일마다 바꿔가면서 기록하는 Append
<appender name="deilyLogFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="deilyLog" />
<param name="DatePattern" value=".yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{HH:mm:ss}]%-5p %c - %m%n" />
</layout>
</appender>
additivity 속성 false 또는 true 중 하나를 속성값으로 설정
→ false : root 엘리먼트의 appender 제외, true(기본값) : root 엘리먼트의 appender 포함
<logger name="xyz.itwill00.log" additivity="false">
<level value="info"/>
<appender-ref ref="sample"/>
<appender-ref ref="deilyLogFile"/>
</logger>