반응형
01. 로그팩토리 없이 콘솔에 로그 출력
1) 단점
- 단일 스레드로 인해 기록하면서 실행을 함께 해야함 : 속도 저하
- 메소드명이나 클래스명이 바뀌면 출력되는 로그정보도 직접 수정해줘야함 : 유지보수의 효율성 감소
- 비효율적인 프로그램이 됨 이러한 문제점들을 로그구현체가 해결해줌
2) HelloWorld.java
package xyz.itwill00.log;
public class HelloWorld {
public String hello(String name) {
System.out.println("HelloWorld 클래스의 hello 메소드 - 시작");
String message=name + "님, 안녕하세요.";
System.out.println("HelloWorld 클래스의 hello 메소드 - 종료");
return message;
}
}
3) HelloWorldApp.java
package xyz.itwill00.log;
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("HelloWorldApp 클래스의 main 메소드 - 시작");
HelloWorld hw = new HelloWorld();
String message = hw.hello("홍길동");
System.out.println("message = " + message);
System.out.println("HelloWorldApp 클래스의 main 메소드 - 종료");
}
}
- 실행 시 콘솔에 기록됨
02. 로그팩토리를 생성해 로그구현체를 통해 콘솔에 로그 출력
1) 로그구현체
- 로그구현체(log4j)는 이미 라이브러리에 있으므로, 로그팩토리를 만들어야함
- 로그팩토리로 로그이벤트 발생하는 방법은 아래와 같음
2) 장점
- 기록하는 스레드와 프로그램을 실행하는 스레드가 다름 : 프로그램 속도 빨라짐
- 클래스나 인터페이이스가 바뀌어도 기록하는 이름을 변경할 필요 없음 : log4j.xml에서 기록할 패턴으로 작성되어있기 때문!!
3) LogHelloWorld.java
package xyz.itwill00.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogHelloWorld {
private static final Logger logger = LoggerFactory.getLogger(LogHelloWorld.class);
public String hello(String name) {
logger.info("시작");
String message=name + "님, 안녕하세요.";
logger.info("종료");
return message;
}
}
4) LogHelloWorldApp.java
package xyz.itwill00.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogHelloWorldApp{
//Logger 객체 : 로그 이벤트를 발생하기 위한 객체
//LoggerFactory 클래스 : Logger 객체를 생성하여 제공하기 위한 클래스
//=> 안정적이고 원하는 형태의 객체를 좀 더 쉽게 제공받기 위해 사용하는 것
//LoggerFactory.getLogger(Class<T> clazz) : 메모리에 저장된 클래스(Class 객체 - Clazz)를
//전달받아 해당 클래스에서 로그 이벤트를 발생할 수 있는 Logger 객체를 생성하여 반환하는 메소드
// 어떤 클래스든 사용하며, 객체가 변하지 않게 하기 위해 상수처럼 static final로 선언함
private static final Logger logger = LoggerFactory.getLogger(LogHelloWorldApp.class);
public static void main(String[] args) {
//logger.info(String message) : logger 객체로 INFO 레벨의 로그 이벤트를 발생하는 메소드
//=> 매개변수에 로그 구현체로 기록될 로그 메세지 전달
logger.info("시작");
//방법1. log4j.xml에 의해 경고 이상의 레벨만 콘솔에 기록되기 때문에
//메소드 변경해야 콘솔에 기록이 됨
//logger.warn("시작");
LogHelloWorld hw = new LogHelloWorld();
String message = hw.hello("홍길동");
System.out.println("message = "+message);
logger.info("종료");
/*
//방법2. log4j.xml에 추가
<appender name="sample" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%c{1} 클래스의 %M 메소드 - %m%n" />
</layout>
</appender>
<logger name="xyz.itwill00.log" additivity="false">
<level value="info" />
<appender-ref ref="sample" />
<appender-ref ref="dailyLogFile" />
</logger>
*/
}
}
반응형
'framework > spring' 카테고리의 다른 글
[spring] 6. Spring 프로젝트 파일명의 종류 | 라이브러리 | maven빌드툴 | 버전변경 | context루트경로변경 (with Eclipse) (0) | 2024.07.25 |
---|---|
[spring] 5. 메이븐 라이브러리 환경설정파일 pom.xml (0) | 2024.07.24 |
[spring] 4. sts 설치법 | spring으로 perspective 변경법 | spring 프로젝트 생성법 (feat. Eclipse) (1) | 2024.07.24 |
[spring] 3. 로그설정파일 - log4j.xml (3) | 2024.07.23 |
[spring] 2. Lombok 라이브러리 빌드 및 사용법 (2) | 2024.07.23 |