개발시에 필요한 library들(API)을 원격 저장소로 부터 설정 정보만으로 자동으로 내 로컬 시스템에 다운로드 하게 하는 software
Maven 사용 방법 * 참고 : 이클립스 내부에는 이미 maven 기능을 적용, 따라서 이클립스 사용자는 사용만 하면 됨 1. 어떤 library 필요 파악 2. maven project로 변환해서 설정 파일 편집 pom.xml이라는 파일에 library 정보를 설정 3. 다운로드 받은 library들 사용
프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 java기반 로깅 유틸리티. 디버그용 도구로 주로 사용.
로그 기록을 위한 작업 1. log4j library 사용 - 참조 사이트 https://jakarta.apache.org/ - IT의 다양한 기술셋을 공유하게 되는 비영리 재단 - 모든 언어의 다양한 기술셋 지원 : 기증 및 배포 http://logging.apache.org/ 언어별 지원 자바인 경우 이름이 log4j일 뿐 즉 언어별 사용 방법 동일 2. 적용 방법 - 순수 로직 개발 코드에 적절한 위치에 log4j API 지원 메소드 호출 - log4j 라는 설정 정보 파일이 있어야만 함
로그 개요 1. 프로그램에서 경우의 수 1) 정상 실행 - 예시 : 데이터 검색시 해당 데이터가 있을 수도 있고 없을수도 있음 2) 비정상 실행 - 처리 불가능한 상태 : 에러 - 처리 가능한 상태 : 예외 프로그램 정지가 아니라 문제가 생겨도 유연하게 다음 로직들 실행 2. 현시대의 가장 중요한 자산 - 사람에 대한 데이터 - 사람에 대한 정보가 기록은 필수 : 로그기록 3. 정보 기록의 범위 trace < debug < info < warn < error - 예시: info만 설정시 info 이상의 모든 레벨 실행 1. error - 사용자 요청을 처리하는 중에 발생되는 문제 2. warn - 처리 가능한 문제가 발생되었을때 기록하고자 하는 레벨, 또는 에러의 원인이 될수도 있는 레벨 3. info - 관리자 관점에서 실시간 발생되는 상황들을 파악하고자 하는 기본 정보 기록의 레벨 4. debug - 개발자 관점에서 개발시에 소소한 진행 사항들 확인하고자 하는 레벨의 기록 5. trace - 모든 상황 다 추적, 상세한 정보를 확인하고자 할 때 사용하는 레벨
log4j 사용 방법 1단계 - library 다운로드 및 셋팅 혹여 선택했던 버전이 다운로드가 원할하지 않을 경우 버전 변경하면서 다운로드 시도 2단계 - log4j가 사용하는 사용자 정의 설정 정보로 log4j 스펙에 맞게 파일 생성 log4j.properties 파일명으로 반드시 생성 및 설정 3단계 - log4j 사용 코드로 개발
log4j 개발 단계 1단계 : 로그 기록의 기능을 보유한 객체 생성 2단계 : 상황에 따라 해당 레벨(5가지 레벨) 선별해서 로직별 적용 3단계 : properties 파일 완성 4단계 : 실행하면서 사용 5단계 : 실시간 서비스시에 로그 레벨 변동이 필요한 경우 코드 수정이 아니라 properties파일 설정 정보만 수정
- 2021-07-28 16:50:46,350 INFO (LogTest.java:18) - master 로그인 했다 ~~
# Set root category priority to INFO and its only appender to CONSOLE.
- info : info 레벨로 로그기록을 하겠다는 설정,
- CONSOLE : 사용자들이 별칭으로 선언(가변적), 서버 실행창을 지정, 출력 포멧만 필요
- 서버 실행창을 지정
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
- 출력 포멧만 필요, 형식을 pattern
- 출력 pattern : %d %5p (%F:%L) - %m%n
- %d : 날짜
- %5p : 레벨(경고? 디버깅?)
- (%F:%L) : (file명과 line)
(LogTest.java:18) - LogTest.java file의 18 line에서 기록
- - : 여백 포함 -
- %m%n : %m - 각 레벨별 메소드의 parameter로 적용한 메세지
logger.info("메세지");
%n - new line(개행 특수 기호)
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
- daily : 사용자들이 별칭으로 일별로 파일로 적재하고 할 경우에 주로 사용
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.rootCategory=info, CONSOLE, daily
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.daily.File=C:\\20210628_lab\\88.log\\playdata.log
log4j.appender.daily.DatePattern='.'yyyy-MM-dd
log4j.appender.daily.layout=org.apache.log4j.PatternLayout
log4j.appender.daily.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
#log4j.appender.daily.layout.ConversionPattern=- %F %m%n
Log4j Test
package log4jtest;
import org.apache.log4j.Logger;
public class LogTest {
//다수의 메소드들이 로그 기록을 위한 설정을 위해 멤버 변수로 로그 기록 객체 생성
//이 객체를 활용하기 위해서는 메소드의 parameter로 package명.class명 을 적용해서 해당 class에서 로그 기록
static Logger logger = Logger.getLogger("log4jtest.LogTest");
// id를 검증하는 로직의 메소드라 가정 - id가 master가 아니라면 warn( 경고 ) 메세지
//id가 master라면 관리자에게 "master로그인 했다라는 메세지"
//객체 생성 이전에도 호출 가능한 static 메소드
public static void loginCheck(String id) {
if(id.equals("master")){ //id 가 master라면 true
// ..end user에게 정상 메세시 출력 로직이 있다 가정
logger.trace("trace - master 로그인 했다 ~~");
logger.debug("debug - master 로그인 했다 ~~");
logger.info("info - master 로그인 했다 ~~");
logger.warn("warn - master 로그인 했다 ~~");
logger.error("error - master 로그인 했다 ~~");
}else {
// ..end user에게 id 오류 출력
logger.warn("warn - user가 잘못 입력 혹시 헤커? 확인 해 보자");
}
}
// ... 다수의 메소드에 다수의 로그기록을 한다 가정
public static void main(String[] args) {
//2021-07-28 16:50:46,350 INFO (LogTest.java:18) - master 로그인 했다 ~~
loginCheck("master");
}
}