EyeTSS/radar/src/main/java/kr/gmtc/tss/filelog/MessageBodyLogger.java

111 lines
2.7 KiB
Java

package kr.gmtc.tss.filelog;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Queue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import kr.gmtc.tss.data.vo.RadarTrackVO;
import kr.gmtc.tss.main.MainServer;
import kr.gmtc.tss.util.FileUtil;
public class MessageBodyLogger implements Runnable {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Queue<RadarTrackVO> messageBodyQueue;
private boolean isRunning = true;
private int listChunkSize = 100;
private long sleepMillis;
public MessageBodyLogger(Queue<RadarTrackVO> messageBodyQueue, int listChunkSize, long sleepMillis) {
this.messageBodyQueue = messageBodyQueue;
this.listChunkSize = listChunkSize;
this.sleepMillis = sleepMillis;
}
@Override
public void run() {
isRunning = true;
while (isRunning) {
try {
RadarTrackVO [] chunkArr = getChunkMessageArr(messageBodyQueue);
for (int i = 0; i < chunkArr.length; i++) {
//logger.error(getMessageBody(chunkArr[i]));
FileUtil.writeLogFile(getMessageBody(chunkArr[i]), MainServer.FILE_LOG_NAME);
}
} catch (Exception e) {
logger.info("-- [SqlLogger] LogSave error : " +e.getLocalizedMessage());
}
sleep(sleepMillis);
}
}
private RadarTrackVO [] getChunkMessageArr(Queue<RadarTrackVO> messageBodyQueue) {
int loopCnt = 0;
if(messageBodyQueue.size()>listChunkSize) {
loopCnt = listChunkSize;
}else {
loopCnt = messageBodyQueue.size();
}
RadarTrackVO [] chunkArr = new RadarTrackVO[loopCnt];
for (int i = 0; i < loopCnt; i++) {
chunkArr[i] = messageBodyQueue.poll();
}
return chunkArr;
}
// private String getMessageBody(String str) {
// Date date = new Date();
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
// StringBuilder sb = new StringBuilder();
//
// sb.append(formatter.format(date));
// sb.append(" ");
// sb.append(str);
//
// return sb.toString();
// }
private String getMessageBody(RadarTrackVO vo) {
ObjectMapper mapper = new ObjectMapper();
StringBuilder sb = new StringBuilder();
String str;
try {
str = mapper.writeValueAsString(vo);
sb.append(str);
sb.append("\n");
} catch (JsonProcessingException e) {
logger.debug("[SqlLogger] sleep error : "+e.getLocalizedMessage());
}
return sb.toString();
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
logger.debug("[SqlLogger] sleep error : "+e.getLocalizedMessage());
}
}
public void setRunning(boolean isRunning) {
this.isRunning = isRunning;
}
}