728x90

 

 

▶ log

로그 기록의 로그이기도 함

 

목적

기록을 남기고자 할 때 사용

1)콘솔에 찍는 용도

    - 프린트메소드 사용하는게 시스템적 관점에서 성능저하가 좀 된다고함

    - 많이 찍어야한다고 하면 로그를 많이 사용

2)db에 저장하는 용도

3)파일에 저장하는 용도

    - 파일에 가장 많이 사용

    - 파일에 먼저 저장하고 db에 저장하는 경우 많음. db는 용량 한계가 있는 경우가 많기에

 

콘솔에 찍히는 기록도 log

 

장점

1)파일, DB 등에 저장 가능

    - 파일은 stream 통해 저장가능

2)로그 파악이 쉬워 문제 해결이 용이

3)빠르고 효율적인 디버깅 가능

 

단점

1)코드 양 증가

로그를 하기 위한 설정 코드들이 길다

    - 로그를 사용하기 위한 설정정보들을 가지고 와야하는데, 단순하게 콘솔 넣는거만 생각해보더라도 print만 불러오면 되는데 로그를 하기위한 설정 코드들이 꽤 길어서 전체적인 코드양이 꽤 많이 늘어남

2)개발 중간에 로그 코드를 넣기가 어려움

    - 전체적으로 코드양 증가 → 개발 중간에 로그 코드를 넣기가 어려움

3)심하게 많이 생성되는 로그는 혼란을 야기하고, 로그 때문에 성능에도 영향이 갈 수 있음

    - 문제 해결을 위해 로그를 너무 많이 넣어두면 양이 많아지기 때문

 

로그에 관한 것들

콘솔에 찍히는 기록

HomeController

logger :인터페이스(Interface)

 

 

로그 설정 파일

경로 : src/main/resources

log4j.xml

 

log4j.xml 안의 태그들

1)Appenders

2)Application Loggers

3)Root Logger

 

1)Appenders

전달 받은 로그를 어디에 출력할지 결정

 

ConsoleAppender : 로그를 콘솔에 출력하기 위한 어펜더

JDBCAppender : 로그를 db에 출력하기 위한 어펜더

FileAppender : 로그를 파일에 출력하기 위한 어펜더

    - 단점 : 지정 파일에 로그가 계속 남아 크기가 지나치게 커지고 지속적인 로그 관리가 불가능하다는 단점

RollingFileAppender : 파일어펜더를 보완하는 어펜더

    - 일정 조건 후에 기존 파일을 백업 파일로 바꾸고 다시 처음부터 시작

    - 백업파일이 1-10까지 기록했으면 다음 파일은 11-20까지 기록하는 식

ex)

1-100까지 포문 돌리는 중. 새로 시작하는 지점

1-10까지 담기고 백업파일로

11-20 담기고 백업파일로 담기고

ex. DailyRollingFileAppender : 하루마다 백업

 

<appender>

<!-- Appenders -->
<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>

name 어디다 넣을것인지 지정

layout 형식

 

<layout> : 로그를 어떤 형식으로 출력할 것인지 결정

layout 종류

1)DateLayout

2)HTMLLayout

3)PatternLayout : 디버깅에 가장 적합

4)SimpleLayout

5)XMLLayout

<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>

 

<layout> value속성

  • %p : debug, info, warn, error, fatal 등의 priority
  • %m : 로그 내용 출력
  • %d : 로깅 이벤트가 발생한 시간 출력(프로그램 속도를 느리게 할 수 있음)
  •   - 포맷을 %d{HH:mm:ss, SSS}와 같은 형태로 사용하며 SimpleDateFormat에 따른 포매팅을 하면 됨
  • %t : 로깅 이벤트가 발생된 스레드 이름 출력
  • %% : % 출력
  • %n : 개행문자 출력
  • %c : package(카테고리) 출력
  • %c{n} : n(숫자)만큼의 package 를 하단부터 역으로 출력
  • %C : 호출자의 클래스명 출력 ( 클래스가 대문자로 시작하니 c도 대문자C)
  • %f : 로깅이 발생한 프로그램 파일명 출력
  • %l : 로깅이 발생한 caller의 정보 출력
  • %L : 로깅이 발생한 caller의 라인수 출력
  • %M : 로깅이 발생한 method이름 출력
  • %r : 애플리케이션 시작 이후부터 로깅이 발생한 시점의 시간(밀리세컨) 출력

 

<layout> 아래 <param value=””>의 해석 value=”%-5p” : 왼쪽정렬. 그냥5p면 오른쪽정렬

콘솔 어펜더에서 지정하고 있는 패턴이 뭐를 가지고 이용 했는지

내 로그가 어떻게 찍혔는지를 한번 더 확인 해보라

 

2)Application Loggers

등록된 로그들을 받아주는 역할

name속성에 등록된 영역들을 다 받아서 관리하겠다

<logger name="**com.kh.Spring**">
		<level value="info" />
</logger>

등록된 로그들을 받아주는 역할

     DEBUG < INFO < WARN < ERROR< FATAL        (오른쪽으로 갈 수록 심각한 에러)

설정한 level 이상만 출력

      ex) level info라고 지정하면 debug는 안보임

  • fatal : 아주 심각한 에러발생
  • error : 어떤 요청 처리 중 문제 발생
  • warn : 프로그램 실행에는 문제 없지만 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지
  • info : 상태 변경과 같은 정보성 메세지
  • debug : 개발 시 디버그 용도로 사용하는 메세지
  • trace : debug가 너무 광범위한 것들 해결하기 위해 디버그보다 좀 더 상세한 이벤트를 나타냄. 경로추적에서 많이씀

 

 

3)Root Logger

모든 자식 2번 <logger>들의 로깅 출력이 3번<root> root logger를 통해 일어남

2번의 모든 로거들은 실행이 되면 3번Root Logger로 찾아옴

 

 

728x90
반응형

+ Recent posts