※ src/main/java 폴더에 xyz.itwill00.log 패키지 생성 → HelloWorld 클래스 생성
📃HelloWorld.java
※ xyz.itwill00.log 패키지에 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; } }
📃HelloWorldApp.java
※ xyz.itwill00.log 패키지에 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 메소드 - 종료"); } }
📃LogHelloWorld.java
※ xyz.itwill00.log 패키지에 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; } }
📌Logger 객체 : 로그 이벤트를 발생하기 위한 객체
📌LoggerFactory 클래스 : Logger 객체를 생성하여 제공하기 위한 클래스
📌LoggerFactory.getLogger(Class <?> clazz) : 메모리에 저장된 클래스(Class 객체 - Clazz)를 전달받아 해당 클래스에서 로그 이벤트를 발생할 수 있는 Logger 객체를 생성하여 반환하는 메소드
📌Logger.info(String message) : Logger 객체로 INFO 레벨의 로그 이벤트를 발생하는 메소드
→ 매개변수에 로그 구현체로 기록된 로그 메세지 전달📃LogHelloWorldApp.java
※ xyz.itwill00.log 패키지에 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 객체를 생성하여 반환하는 메소드 private static final Logger logger=LoggerFactory.getLogger(LogHelloWorldApp.class); // public static void main(String[] args) { //Logger.info(String message) : Logger 객체로 INFO 레벨의 로그 이벤트를 발생하는 메소드 //→ 매개변수에 로그 구현체로 기록된 로그 메세지 전달 logger.info("시작"); LogHelloWorld hw=new LogHelloWorld(); String message=hw.hello("홍길동"); System.out.println("message = "+message); logger.info("종료"); } }
📃log4j.xml
<!-- LogHelloWorldApp.java 클래스에 로그 표시를 위한 코드 --> <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><appender name="dailyLogFile" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="dailyLog"/> <param name="DatePattern" value=".yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{HH:mm:ss}]%-5p : %c - %m%n" /> </layout> </appender>📌additivity 속성 : false 또는 true(기본) 중 하나를 속성값으로 설정
→ 속성값이 [false]인 경우 root 엘리먼트에 로그 구현체(Appender)를 포함하지 않도록 동작
→ 속성값이 [true]인 경우 root 엘리먼트에 로그 구현체(Appender)를 포함되도록 동작<!-- LogHelloWorldApp.java 클래스에 로그 표시를 위한 코드 --> <logger name="xyz.itwill00.log" additivity="false"> <level value="info"/> <appender-ref ref="sample"/> <appender-ref ref="dailyLogFile"/> </logger>