생활
spring 에서 sysout 과 loger 와 차이점이 무엇인지 궁금합니다.
spring 에서 sysout 과 loger 와 차이점이 무엇인지 궁금합니다.
system.out.println("LOG"); 와
logger.debug("LOG"); 의 차이점이 무엇인가요???
눈으로 보기에는 별 차이를 느낄수가 없는데 후자가 좋은 이유를 모르겠습니다.
프로퍼티로 레벨 관리가 가능한것 뿐인가요???
5개의 답변이 있어요!
안녕하세요.
system.out.println 과 logger 두가지 모두 시스템 상에서 확인하고자 하는 값을 출력해주는 기능을 수행합니다.
하지만 logger의 경우 logger.error, logger.warn, logger.debug, logger.info 등 다양한 단계로 구분지어 출력이 가능하며
더이상 출력하고 싶지 않은경우 system.out.println는 일일이 해당 부분을 주석처리나 삭제해야 하지만
logger의 경우 설정에서 출력을 원하는 단계를 선택하여 원하는 단계의 로그만 출력 필요한 부분의 출력을 쉽게 조절할 수 있습니다.
안녕하세요.
아시는 봐와 같이 system.out.println("LOG") 의 경우 로그를 콘솔에 찍는 형태입니다. 또한 WAS 로그파일에 추가로 로그정보가 저장됩니다.
logger.debug("LOG"); 의 경우 레벨관리도 있지만 레벨별로 다양한 형태로 로그 출력이 가능합니다.
로그레벨 별로 별도 파일로도 저장이 가능하고, 콘솔로도 가능합니다.
트랜잭션이 많이 발생하는 경우 모든 디버깅 정보를 system.out.println("LOG") 이렇게 처리를 하게되면
WAS 로그와 어플리케인션 로그정보가 섞여서 디버깅도 힘들고, 파일 자체가 너무 커져서 분석하기가 쉽지 않습니다.
하지만 logger를 사용하면 레벨별, 날짜별도 로그 정보 관리가 용이하기 때문에 디버깅도 쉽고, 파일이 커지면 쉽게 날짜별이나 레벨별도 삭제도 용이하기 때문에 관리가 편리합니다.
일단 위에는 표준출력으로 미리정의된 PrintStream 에 메시지를 보내서 출력을 보내는 것이고,
후자는 로거에게 debug 레벨의 메시지를 출력하는 것입니다.둘다 출력을 하는 공통점이 있습니다. 이미 출력 대상에 대해서는 추상화가 되어 있기 때문에 화면, 파일, 기타 로깅 시스템 등 대상에 대한 차이는 없습니다.
말씀하신 것 처럼 로거의 경우 레벨에 따라 출력 범위를 결정할 수 있기 때문에,
개발시에는 DEBUG 레벨로 출력을 시키고, QA환경에서는 INFO, 운영에서는 WARNING 이상 처럼 환경에 따라 적절하게 출력의 양을 바꾸기에 편리합니다.또한 성능상 차이가 있습니다.
println의 경우 아래와 같이 동기화 처리가 되어 있습니다.
package java.io; public class PrintStream extends FilterOutputStream implements Appendable, Closeable { // .. public void println(String x) { synchronized (this) { print(x); newLine(); } }따라서 객체에 대한 잠김 오버헤드(locking overhead)가 발생할 수 있습니다.
더 자세한 내용은 아래 블로그의 글을 참고하시기 바랍니다.
안녕하세요.
System.out.println은 기본적으로 콘솔에 출력하는 API이며, logger는 콘솔, 파일, 네트워크 등에 사용할 수 있습니다.
System.out.println은 sync로 출력하기 때문에 로그 양이 많을 때 시스템에 문제가 발생할 수 있습니다. async는 시스템 자원을 좀 더 유연하게 사용할 수 있습니다.
logger는 로그 레벨이 다양하기 때문에 레벨에 맞는 패턴, 출력 방법을 선택할 수 있습니다. 레벨로 출력을 제어할 수 있기 때문에 로그 코드를 삭제 하지 않더라도 로그에서 제외할 수 있습니다.
slf4j 등을 사용하게 되면 문자열 결합 등으로 인한 오버헤드를 줄일 수 있습니다.
system.out.println("LOG"); 는 spring를 실행시킨 콘솔창에 출력하는 것입니다.
logger.debug("LOG");는 파일에 출력하는 것입니다.
콘솔창을 닫거나 로그가 너무 많은 경우 콘솔창에서 로그를 확인하는것은 매우 어렵습니다.
그래서 파일로 남기기 위해 logger을 사용합니다.
Log4j 는 매우 많이 사용되는 library입니다. 기본 사용법을 익혀두시는게 좋습니다.