一寸大海 劫長之井

인텔리제이 라이브 템플릿 사용법 - log4j를 예로 들어.. 본문

IDE/JetBrains

인텔리제이 라이브 템플릿 사용법 - log4j를 예로 들어..

하느바람 2016. 9. 21. 00:47

log4j의 로거를 가져 오는 코드는 아래와 같습니다. 

private static final Logger logger = LogManager.getLogger(className.class);

그리고 이 코드를 로거를 사용할 모든 클래스에서 삽입하면 되죠. 그리고 클래스가 많아지면 매우 귀찮습니다.

그래서 라이브 탬플릿에 넣어 봅시다. 


Setting > Live Templates 를 열고 추가 버튼의 Live Templates 를 눌러서 추가 화면을 열어 봅시다. 

Abbreviation 은 getlogger 로 Description 에는 getlogger for Log4j  라고 넣어봅시다.

그리고 마지막으로 내용에는 위의 코드를 그대로 넣습니다. 

그리고 선언문이니까. Application in 은 java>Declaration 을 선택해 줍시다. 

자 이제 코드에서 getlogger를 입력하여 테스트를 해보면 전체 구문이 정상적으로 입력 되는 것을 알 수 있습니다. 


하지만 className 이라고 적은 부분은 에러가 나죠. 그래서 클래스 이름을 따로 입력해주어야 합니다. 역시 귀찮지요? 클래스를 자동 입력하는 방법을 알아봅시다.

1. 일단 내용의 className 을 $CLASS$ 로바꾸어 줍니다. ( 사실 $와 $로 둘러쌓아기만 하면 다른 이름이여도 됩니다.)

private static final Logger logger = LogManager.getLogger($CLASS$.class);

2.  지금까지 disable 상태이던 Edit variables 가 활정화 된 것을 알 수 있습니다. 눌러봅시다.

01234

3. 슬라이드를 참고하여 Expression에는 className() 를 입력하고 Skip if defined 에는 체크를 하도록 합시다. 

4 OK.

5. Apply.

이제 테스트를 해보시면 클래스 네임이 자동으로 입력 되는 것을 볼 수 있습니다.


그런데 로거의 변수명을 변경하고 싶어 질 수 있지 않겠습니까?

탬플릿 텍스트는 아래의 구문으로 바꾸고. 다시 Edit variables 를 열어봅시다. 

private static final Logger $Logger$ = LogManager.getLogger($CLASS$.class);

그리고 Logger 열에 Default Value 를 입력해여 줍니다. (디폴트 값이 동작하지 않네요 입력하지 않아도 될 거 같습니다. )

자 테스트를 해봅시다. 

01234

getloger 로 탬플릿을 입력하면 붉은 박스가 표시 되면서 변수명을 입력하라고 알리게 됩니다. 입력을 다하고 엔터를 누르면 입력이 종료 되죠.


짜잔! 이제 편해졌습니다.


라고 하면 장난하냐! 라고 생각 하시겠지요. 사실 지금까지의 세팅은 Logger 와 LogManager가 자동 임포트 되지 않는 문제가 있습니다. 

이럴때는 아래의 최종 본 처럼 클래스의 심플네임이 아니라 패키지 네임을 포함하는 전체 이름을 입력 하면 됩니다. 


최종본은 이렇게 됩니다.  (물론 $CLASS$ 에는 className() 을 지정하셔야 합니다.  그리고 탬플릿 수정 화면에서 좌측 아래의 Use static import if possible 을 체크해 줍시다.)

private static final org.apache.logging.log4j.Logger $Logger$ = org.apache.logging.log4j.LogManager.getLogger($CLASSNAME$.class);



- 로거 변수의 호출 부분 탬플릿으로 지정하기.

로거를 변수의 선언을 탬플릿으로 변경 하였으니. 이번엔 변수의 호출 부분을 탬플릿으로 만들어 봅시다.

log4J의 Logger는 대강. fatal,debug,warn,info,debug. 의 다섯 종류의 함수들을 사용합니다. 

그러니까 그냥 그 형식에 맞춰서 넣어주면 됩니다. 

하지만 여기서 문제가 되는 것은 위의 최종본 에서는 로거의 변수명이 변동 가능 하도록 되어 있다는 겁니다. 

이럴 때 사용하는 탬플릿 함수가 variableOfType(type) 입니다. 이것은 (type)에 입력한 타입을 사용 하는 변수 들을 자동완성 제시어 형식으로 선택 할 수 있도록 제시 해줍니다. , 그리고 해당 되는 변수가 한개 이면 제시하지 않고 바로 입력 해 줍니다. 


그래서 우리가 사용 할 탬플릿 텍스트는 아래 와 같습니다. (abbr 은 선호 하는 방식으로 지정해 줍시다.)

$Logger$.warn();


그리고 Edit variables 창의 Logger  창에는

variableOfType("Logger")

라고 입력 하고 테스트 해봅시다. 


그럼 정상적으로 작동 하시나요?  만약 작동 하신다면 다행입니다. 

하지만 여러개의 자동 완성이 뜨신다면.

variableOfType("org.apache.logging.log4j.Logger")

와 같이 전체 패키지를 지정해 주시면 됩니다. 


Comments