Programing/Error Resolution(오류해결)

세무민의 코딩일기 : Eclipse에서 System.out.println가 콘솔에서 출력되지 않을 때 해결하는 방법(부제 : logger란 무엇인지)

세기루민 2021. 7. 19. 21:45
728x90
오늘 재택근무를 하면서 동료 직원이 했던 질문이 있었다. 
"System.out.print가 콘솔에서 출력이 안되요... Logger라는게 있다던데 그걸 사용해볼까요?"

이 질문에 대한 내 답변은 무엇이었을까?


나는 우선 2가지의 경우의 수를 말했다. 

  • Window -> Preferences -> Run/Debug -> Console -> limit console output 변경

  위의 경우는 콘솔창에 출력이 제한되었을 경우를 생각하여 답변을 한 내용이다.

Limit console output을 체크하지 않는 경우일 때 제한없이 출력되고 

만약에 제한을 한다면 체크를 하고 버퍼의 크기를 변경해주면 된다. 

기본값으로는 8만 size인데 여기서 자유롭게 추가해주면된다. 

해당 콘솔에서 버퍼 크기의 최대 값은 2,147,383,647 이다.

위의 방법을 진행하였지만 콘솔창에 출력이 되지 않았다. 

 

  • Project -> Build Automatically 체크 

그래서 내가 수행했던 다음 방법은 Build Automatically Check!

우선 build Automatically를 선택해놓으면 

자동으로 프로젝트를 빌드해주기 때문에 bulld project를 할 필요가 없어진다. 

그렇지만 가끔은 build automatically를 했어도 빌드가 되지 않는 경우가 종종 있는데 

이때 Clean을 이용하여 프로젝트를 한번 정리해주면 된다. 

무튼 위의 방법을 수행했으나 콘솔에 출력되지 않았다.

  • 캐시 비우기 및 강력 새로고침

마지막으로는 혹시 모르는 페이지의 캐시들을 비워주고 강력 새로고침을 수행했다. 

위의 사진과 같이 웹 개발의 경우에는 캐시가 쌓여서 출력이 안되는 경우가 종종 있어서 

캐시를 비우라고 했고 이 방법을 통해서 콘솔에 출력되는 오류를 해결했다. 

곰곰히 생각해봤을 때 캐시 비우기와 강력 새로고침이 효과가 있다는 생각이 들었다. 

실제 웹 개발을 하다보면 세션과 쿠키가 엄청 쌓이게 되는데 이런 부분을 비워주지 않으면 

프로젝트 빌드가 되지 않은 상황들을 종종 볼 수 있었기 때문이다.

이클립스를 사용하다보면 가끔 발생할 수 있었던 문제였으나 위와 같은 방법으로 쉽게 해결할 수 있다. 


그렇다면 동료 직원이 물어봤던 logger는 무엇이고 logger는 System.out.println와 무슨 차이를 가지고 있을까?

Logger : 오류 메세지를 출력
System.out.println : 콘솔에 값 출력

위에 내용을 보면 혹시나 모르는 사람이라면 무슨 소리인지 이해가 안갈 수 있다. 

따라서 완전 간단한 예시를 만들어 봤다. 

public class tistory_test_01 {

	static final Logger logs = Logger.getLogger(tistory_test_01.class.getName());
	

	
	public static void main(String[] args) {
		logs.log(Level.INFO, "sg-moomin tistory 화이팅!");
		
		String simpleDate = null;
		int numbers = 0;
		simpleDate = testDate_mix(numbers);
		
		try {
			if(simpleDate == "N") {
				throw new Exception("오류");
			}
		
		} catch(Exception ex) {
			logs.log(Level.WARNING, "오류 원인 --> SimpleDate = N");
			logs.log(Level.SEVERE, "E : {0}", ex.toString());
		}	
	}
	
	
	public static String testDate_mix(int number) {
		Random random = new Random();
		if (random.nextInt(5) <= number) return "Y";
		else return "N";
	}
	

}

위의 코드는 랜덤한 정수 값이 number값보다 작은지 큰지를 비교하는 완전 간단하게 만든 코드인데 

여기서 포인트를 두고 봐야할 부분은 logger이다. 

System.out.println은 말 그대로 내가 원하는 변수에 대한 값들을 출력 받을 수 있고 

Logger는 플랫폼별 로깅 구현에 로그 및 추적 메세지를 보내는 데 사용된다. 

출력시 logger를 이용하면 위와 같이 확인이 가능한데 

사실 위에서 사용한 것보다 logger에서 FINER를 이용하여 소스나 클래스를 추적할 수 있다. 

위의 경고로 사용하는 경우도 많지만 대부분 추적하기 위해 사용하는 경우가 다수이다. 

따라서 동료가 말했던 Logger를 단순히 변수 출력으로 사용하는 것은 비효율적이다. 


이번 포스팅은 콘솔에 출력이 되지 않을 경우 해결방법과 간단하게 logger에 대해서 확인해봤습니다.

다음에도 더 유익하고 도움되는 정보들로 찾아오겠습니다. 

 

728x90