1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package com.ktds.jgbaek; import org.slf4j.Logger; public abstract class CustomLogger { // abstract 추상 클래스 protected Logger logger; // protected :상속 관계까지에서만 쓸수 있다. // private : 나만 쓸수 있다. public CustomLogger(Logger logger) { this.logger=logger; } public void trace(String msg) { logger.trace(msg); writeTrace(msg); } public void debug(String msg) { logger.debug(msg); writeDebug(msg); } public void info(String msg) { logger.info(msg); writeInfo(msg); } public void warn(String msg) { logger.warn(msg); writeWarn(msg); } public void error(String msg) { logger.error(msg); writeError(msg); } protected abstract void writeTrace(String msg); protected abstract void writeDebug(String msg); protected abstract void writeInfo(String msg); protected abstract void writeWarn(String msg); protected abstract void writeError(String msg); } | cs |
abstract
자신의 역할도 하고, 나머지는 다른 상속받는 클래스에게 맡긴다.
기본기능 : customlog 찍히게 한다.
subclass is a super class
인터페이스와 같은 기능
순서가 있는 추상화 abstract : 낮은 추상화
순서가 없는 추상화 interface : 높은 추상화
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | package com.ktds.jgbaek; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.support.WebApplicationContextUtils; public class MongoLogger extends CustomLogger{ private MongoTemplate mongoTemplate; private MongoLogger(Logger logger) { super(logger); } public MongoLogger(Logger logger, MongoTemplate mongoTemplate) { super(logger); this.mongoTemplate = mongoTemplate; } public MongoLogger(Logger logger, String mongoTemplateBeanName) { super(logger); setMongoTemplateFromXML(mongoTemplateBeanName); } private void setMongoTemplate(String mongoTemplateBeanName){ // Spring Bean에서 가지고오는 방법 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); HttpSession session = request.getSession(); ServletContext context = session.getServletContext(); WebApplicationContext webContext = WebApplicationContextUtils.getWebApplicationContext(context); this.mongoTemplate = (MongoTemplate) webContext.getBean(mongoTemplateBeanName); } private void setMongoTemplateFromXML(String mongoTemplateBeanName){ String mongoContext = "/mongoContextForLogger.xml"; AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(mongoContext); this.mongoTemplate = (MongoTemplate) ctx.getBean(mongoTemplateBeanName); } @Override protected void writeTrace(String msg) { // 1. Log Level 5 // 2. 시간 : 언제 // 3. 요청자 : 누가 // 4. 로그 메세지 : 무엇을 Map<String, Object> log = new HashMap<String, Object>(); log.put("LEVEL", "TRACE"); log.put("DATETIME", new Date()); log.put("REQUESTER", logger.getName()); log.put("MESSAGE", msg); mongoTemplate.insert(log,"log"); } @Override protected void writeDebug(String msg) { Map<String, Object> log = new HashMap<String, Object>(); log.put("LEVEL", "DEBUG"); log.put("DATETIME", new Date()); log.put("REQUESTER", logger.getName()); log.put("MESSAGE", msg); mongoTemplate.insert(log,"log"); } @Override protected void writeInfo(String msg) { Map<String, Object> log = new HashMap<String, Object>(); log.put("LEVEL", "INFO"); log.put("DATETIME", new Date()); log.put("REQUESTER", logger.getName()); log.put("MESSAGE", msg); mongoTemplate.insert(log,"log"); } @Override protected void writeWarn(String msg) { Map<String, Object> log = new HashMap<String, Object>(); log.put("LEVEL", "WARN"); log.put("DATETIME", new Date()); log.put("REQUESTER", logger.getName()); log.put("MESSAGE", msg); mongoTemplate.insert(log,"log"); } @Override protected void writeError(String msg) { Map<String, Object> log = new HashMap<String, Object>(); log.put("LEVEL", "ERROR"); log.put("DATETIME", new Date()); log.put("REQUESTER", logger.getName()); log.put("MESSAGE", msg); mongoTemplate.insert(log,"log"); } } | cs |
context에 DAO와 MongoTemplate bean을 추가해주고
몽고db에 넣을 post명 지정
DAO에 아까 지정한 post명으로 object넘김
글쓰기 했을시 로그 저장되도록 설정
컨트롤러에서 지정
** 몽고 db에 들어간 결과화면 **
'DB > Mongo DB' 카테고리의 다른 글
[BigData] Mongo DB실습하기 (0) | 2016.07.01 |
---|---|
[MongoDB] Aggregation Function (0) | 2016.06.02 |
[MongDB] update, find (0) | 2016.06.02 |
[MongoDB] Spring과 연결해 사용하기 (0) | 2016.06.02 |
[Big Data] MapReduce (0) | 2016.06.01 |