package cn.edu.sjtu.omnilab.syslogdumper; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @Author: Yusu Zhao */ public class LoggerFile extends LoggerAbstract { protected String dirName; protected int maxLine; // File line limit private int numLine = 0; // The current line number; private int numFile = 0; // The current File number; private String fileName; private File file; private FileWriter fileWriter; final private String prefix = "wifilog" + new SimpleDateFormat("yyyy-MM-dd").format(new Date()); // Filename prefix private static final int[] errorCodeList = {124003, 132030, 132053, 132197, 202086, 404400, 500010, 501044, 501080, 501093, 501095, 501098, 501099, 501100, 501102, 501105, 501106, 501107, 501108, 501109, 501111, 501114, 522005, 522006, 522008, 522010, 522026, 522029, 522030, 522035, 522036, 522038, 522042, 522044, 522049, 522050}; public static String Filter(String str) { Pattern pattern; Matcher matcher; pattern = Pattern.compile("<[0-9]{6}>"); matcher = pattern.matcher(str); if (!matcher.find()) return null; String tmp = matcher.group(); int errorCode = Integer.parseInt(tmp.substring(1, 7)); for (int num : errorCodeList) { if (errorCode == num) return str; } return null; } public LoggerFile(ConfLogger conf) throws IOException { // Call super constructor to set the filter super(conf); dirName = conf.getDirName(); maxLine = conf.getFileLength(); // The initial file to write fileName = dirName + "/" + prefix; file = new File(fileName); if (!file.exists()) file.createNewFile(); fileWriter = new FileWriter(file.getAbsolutePath()); // TODO: Remove the LOG LOG.info("Open file " + file.getAbsolutePath()); } @Override public void log(String msg) throws IOException { numLine++; // Determine which output file to use if (numLine <= maxLine) { LOG.debug("Use the old file."); } else { LOG.debug("Open a new file to write."); // Close the old file fileWriter.close(); // Open a new one numFile++; fileName = dirName + "/" + prefix + String.format("%04d", numFile); file = new File(fileName); if (!file.exists()) file.createNewFile(); fileWriter = new FileWriter(file.getAbsolutePath()); // Reset numLine numLine = 0; } // Write to file Date date = new Date(); Long utc_in_ms = date.getTime(); fileWriter.write(utc_in_ms + " " + msg + "\n"); } }