본문 바로가기

Language/Java

Maven project Apache Log4j

07.28 TIL

 

Maven

    개발시에 필요한 library들(API)을 원격 저장소로 부터 설정 정보만으로
자동으로 내 로컬 시스템에 다운로드 하게 하는 software

Maven 사용 방법
* 참고 : 이클립스 내부에는 이미 maven 기능을 적용, 따라서 이클립스 사용자는 사용만 하면 됨
1. 어떤 library 필요 파악
2. maven project로 변환해서 설정 파일 편집 pom.xml이라는 파일에 library 정보를 설정
3. 다운로드 받은 library들 사용
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>playdata</groupId>
  <artifactId>step04_maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
  	<dependency>
  		<groupId>log4j</groupId>
  		<artifactId>log4j</artifactId>
  		<version>1.2.14</version>
  	</dependency>
  </dependencies>
</project>

 

Log4j

프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 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");
	}

}​

출력 결과
지정 경로에 로그 기록 생성

 

'Language > Java' 카테고리의 다른 글

JDBC - oracleDB 연동 및 DML  (0) 2021.08.09
예외 처리, jUnit 단위 Test  (0) 2021.08.02
MVC+ DTO pattern, 자료구조  (0) 2021.07.27
상속, 다형성, MVC pattern  (0) 2021.07.26
변수, 메소드, 생성자  (0) 2021.07.24