package egovframework.rte.fdl.logging;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import egovframework.rte.fdl.logging.util.LogFileUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring/context-common.xml" })
public class AdvancedNetLogTargetTest {
// @BeforeClass
// public static void runRemoteSocketServer() {
// try {
// // Runtime.getRuntime().exec("runSocketServer.bat", null, new File("."));
// Runtime
// .getRuntime()
// .exec(
// "java -classpath ./lib/log4j-1.3alpha-8-374949.jar org.apache.log4j.net.SimpleSocketServer 4448 ./remote/log4j.xml");
// } catch (BindException be) {
// LogManager.getLogger("sysoutLogger").debug("이미 SimpleSocketServer 가 떠 있습니다.");
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
/** testSocketAppender() 테스트 케이스 실행 방법
* 1. 반드시 classpath에 있는 runSocketServer.bat 를 실행한다.
* 2. runSocketServer.bat가 두개 이상 실행되어 있는 경우, 에러를 발생시킨다.
* 3. classpath에 필요한 파일
* ./lib/log4j-api-2.0-rc1.jar; ./lib/log4j-core-2.0-rc1.jar, ./remote/log4j2.xml, ./runSocketServer.bat, ./runSocketServer.sh
* */
/**
* 아래는 SocketAppender를 테스트하는 메소드
* logger: level=DEBUG, appender=Socket
* */
@Test
public void testSocketAppender() throws Exception {
Logger logger = LogManager.getLogger("socketLogger");
// 전송하는 쪽: resource아래 있는 log4j2의 socketLogger는 Socket Appender에 byte array 형태로 직렬화하여 로그 출력 (SerializedLayout)
// 받는 쪽: remote아래 있는 log4j2의 socketLogger는 file과 console에 출력
// 로그 출력
logger.debug("SocketAppender test");
// remote socket 으로 전송하는 시간만큼 기다림
Thread.sleep(500);
// remote socket 로그 확인
// 테스트 편의를 위해 localhost 에 SimpleSocketServer 를 띄우고 remote/log4j2.xml 에서는
// socketLogger 로 들어오는 로그를 ./remote/logs/remoteSample.log 에 기록되게 하였음
File remoteFile = new File("./remote/logs/remoteSample.log");
String lastLine = LogFileUtil.getLastLine(remoteFile);
// 로그파일의 마지막 라인 확인
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault());
assertTrue(lastLine.contains(sdf.format(new Date())));
assertTrue(lastLine.endsWith("SocketAppender test"));
}
/** testSMTPAppender() 테스트 케이스 실행 방법
* 1. 반드시 로컬 pc에 원하는 메일서버를 설치하고, 새로운 계정을 생성한다. (James 메일 서버로 테스트 함)
* 2. 설치한 서버와 user 정보에 따라 log4j2.xml의 SMTP Appender 설정 정보를 확인하고 변경하여야 한다. (<Properties>로 설정됨)
* 3. 반드시 확인하고 변경해야할 정보는 수신자(smtp.to), 서버호스트(smtp.host), 포트(smtp.port) 이다.
* 4. 테스트 케이스 실행 전, 서버(run.bat)를 띄운다.
* 5. SMTP를 통해 보낸 메일을 확인하기 위해 outlook으로 연결하여 생성한 계정으로 로그인한다.
* 6. 테스트 케이스 실행 후 받은 편지함을 확인한다.
* */
/**
* 아래는 SMTPAppender를 테스트하는 메소드
* logger: level=ERROR, appender=SMTP
* */
@Test
public void testSMTPAppender() throws Exception {
System.setProperty("mail.smtp.starttls.enable", "true");
System.setProperty("mail.smtps.auth", "true");
Logger logger = LogManager.getLogger("mailLogger");
// 로그 출력
logger.error("SMTPAppender 테스트 test");
// 받은 메일함 확인
}
}