package com.email.service.impl;
import com.email.dao.LogViewDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Component
public class LogView2 {
private Map<String, LogViewDao> logViewMap;
@Value("${fileName}")
private String fileName;
public void realtimeShowLog(File logFile,String mapKey) throws IOException {
LogViewDao logViewMaps1 = logViewMap.get(mapKey);
final RandomAccessFile randomFile = new RandomAccessFile(logFile, "rw");
ScheduledExecutorService exec = Executors.newScheduledThreadPool(2);
exec.scheduleWithFixedDelay(new Runnable() {
public void run() {
try {
if (logViewMaps1.getCount()!=0){
randomFile.seek(logViewMaps1.getLastTimeFileSize());
String tmp = "";
while ((tmp = randomFile.readLine()) != null) {
System.out.println(new String(tmp.getBytes("ISO8859-1")));
}
}else {
logViewMaps1.setCount(1);
}
logViewMaps1.setLastTimeFileSize(randomFile.length());
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}, 0, 5, TimeUnit.SECONDS);
exec.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
randomFile.seek(logViewMaps1.getLastTimeFileSize());
String msg=format.format(new Date())+"-----------------系统报错---------------"+mapKey;
randomFile.write(msg.getBytes());
randomFile.write("\r\n".getBytes());
}catch (IOException e) {
throw new RuntimeException(e);
}
}
},1,10,TimeUnit.SECONDS);
}
@PostConstruct
public void Init(){
try {
String[] split = fileName.split(",");
for (int i=0;i<split.length;i++) {
logViewMap=new HashMap<>();
logViewMap.put("log"+i,new LogViewDao());
File tmpLogFile = new File(split[i]);
realtimeShowLog(tmpLogFile,"log"+i);
} } catch (IOException e) {
e.printStackTrace();
}
}
}